M
mocheng
Unregistered / Unconfirmed
GUEST, unregistred user!
将彩色位图转换为单色位图,我知道前面已经讨论过,并且我也试过,并不完全理想。
我遇到的麻烦是:我有大量的彩色位图,背景有一些灰色,上面有一些黑色的文字和
绿色、红色的曲线。我希望转换成单色后,背景变为白色,其他的文字和曲线等变为黑色。
我试过前面的大侠们提供的一些方法,但在一些机器上能够成功,在另一些机器上却不能
成功,灰色背景转换后变成了黑色。
我用“画笔”中把彩色图片保存为“单色位图”的功能,在每台机器上都能成功,所以,
我想“画笔”有它独特的算法,特请教各位大侠。
附:我现在用的方法
var
p: PByteArray;
w: Integer;
i, j: Integer;
begin
image1.Picture.LoadFromFile(bmpfile);
image1.Picture.bitmap.pixelformat := pf24bit;
for i := 0 to image1.Picture.bitmap.height - 1 do
begin
p := image1.Picture.bitmap.scanline;
j := 0;
while j < (image1.Picture.bitmap.width-1) * 3 do
begin
w :=(p[j] * 28 + p[j+1] * 151 + p[j+2]*77;
w := w shr 6;
p[j] := byte(w);
p[j+1] := byte(w);
p[j+2] := byte(w);
inc(j, 3) ;
end;
end;
image1.Picture.bitmap.pixelformat := pf4bit;
image1.Picture.bitmap.Monochrome:=true;
image1.Picture.Bitmap.SaveToFile(bmpfile);
end;
我遇到的麻烦是:我有大量的彩色位图,背景有一些灰色,上面有一些黑色的文字和
绿色、红色的曲线。我希望转换成单色后,背景变为白色,其他的文字和曲线等变为黑色。
我试过前面的大侠们提供的一些方法,但在一些机器上能够成功,在另一些机器上却不能
成功,灰色背景转换后变成了黑色。
我用“画笔”中把彩色图片保存为“单色位图”的功能,在每台机器上都能成功,所以,
我想“画笔”有它独特的算法,特请教各位大侠。
附:我现在用的方法
var
p: PByteArray;
w: Integer;
i, j: Integer;
begin
image1.Picture.LoadFromFile(bmpfile);
image1.Picture.bitmap.pixelformat := pf24bit;
for i := 0 to image1.Picture.bitmap.height - 1 do
begin
p := image1.Picture.bitmap.scanline;
j := 0;
while j < (image1.Picture.bitmap.width-1) * 3 do
begin
w :=(p[j] * 28 + p[j+1] * 151 + p[j+2]*77;
w := w shr 6;
p[j] := byte(w);
p[j+1] := byte(w);
p[j+2] := byte(w);
inc(j, 3) ;
end;
end;
image1.Picture.bitmap.pixelformat := pf4bit;
image1.Picture.bitmap.Monochrome:=true;
image1.Picture.Bitmap.SaveToFile(bmpfile);
end;