for y := 0 to BitImg.Picture.Bitmap.Height - 1 do
begin
b := BitImg.Picture.Bitmap.ScanLine[y];
for x := 0 to BitImg.Picture.Bitmap.Width - 1 do
begin
//一个象素点三个字节
Gray := Round(b[x * 3 + 2] * 0.3 + b[x * 3 + 1] * 0.59 + b[x * 3] * 0.11);
if gray > 128 then //全局阀值
begin
b[x * 3] := 255;
b[x * 3 + 1] := 255;
b[x * 3 + 2] := 255;
end
else
begin
b[x * 3] := 0;
b[x * 3 + 1] := 0;
b[x * 3 + 2] := 0;
end;
end;
end;上面的代码将24位图二值化后保存的图片文件体积太大。
BitImg.Picture.Bitmap.PixelFormat := pf1bit;
这样保存成1位图后,颜色太暗了。如何保持二值化后的图像亮度,并大大减小保存后的bmp图片文件所占空间??? 请高手指点 谢谢
begin
b := BitImg.Picture.Bitmap.ScanLine[y];
for x := 0 to BitImg.Picture.Bitmap.Width - 1 do
begin
//一个象素点三个字节
Gray := Round(b[x * 3 + 2] * 0.3 + b[x * 3 + 1] * 0.59 + b[x * 3] * 0.11);
if gray > 128 then //全局阀值
begin
b[x * 3] := 255;
b[x * 3 + 1] := 255;
b[x * 3 + 2] := 255;
end
else
begin
b[x * 3] := 0;
b[x * 3 + 1] := 0;
b[x * 3 + 2] := 0;
end;
end;
end;上面的代码将24位图二值化后保存的图片文件体积太大。
BitImg.Picture.Bitmap.PixelFormat := pf1bit;
这样保存成1位图后,颜色太暗了。如何保持二值化后的图像亮度,并大大减小保存后的bmp图片文件所占空间??? 请高手指点 谢谢
解决方案 »
- 谁开发过呼叫中心系统的!!!!
- 问个简单问题,怎么汉字变成问号了?
- 求delphi6开发的小商品管理软件源码和数据库
- 两个ADOQuery访问同一个表,其中一个修改记录后,另一个为何requery之后仍是修改前的样子?
- 请教如何动态设置access数据库的密码` 急` 在线等`
- 请问如何对image图形边缘进行柔代处理呢?
- 如何将delphi程序制作成安装程序?多多谢啦~。~
- 第一天学习delphi遇到数据库连接的问题
- Delphi编写的DLL如何进行测试?调试??(急。。。)
- Office中复制的文字不能粘贴到Edit文本框里,怎么转换处理
- 我想实现以下效果,请帮忙(用cxgrid或其它什么的都行)
- 呼叫:gxgyj,杰克逊!!
var
BitMap: TBitmap;
begin
BitMap := TBitmap.Create;
BitMap.PixelFormat := pf1bit;
BitMap.Assing(BitImg.Picture.Bitmap);
end;
你处理后的 应该是 pf24bit吧
var
x, y, Gray:Integer;
b, t: PByteArray;
Pal: TMaxLogPalette;
begin
for y := 0 to BitImg.Picture.Bitmap.Height - 1 do
begin
b := BitImg.Picture.Bitmap.ScanLine[y];
for x := 0 to BitImg.Picture.Bitmap.Width - 1 do
begin
//一个象素点三个字节
Gray := Round(b[x * 3 + 2] * 0.3 + b[x * 3 + 1] * 0.59 + b[x * 3] * 0.11);
if gray > 128 then //全局阀值
begin
b[x * 3] := 255;
b[x * 3 + 1] := 255;
b[x * 3 + 2] := 255;
end
else
begin
b[x * 3] := 0;
b[x * 3 + 1] := 0;
b[x * 3 + 2] := 0;
end;
end;
end;
BitImg.Picture.Bitmap.PixelFormat := pf1bit;
LongWord(Pal.palPalEntry[0]) := $000000;
LongWord(Pal.palPalEntry[1]) := $ffffff;
Pal.palVersion := $300;
Pal.palNumEntries := 2;
BitImg.Picture.Bitmap.Palette := CreatePalette(PLogPalette(@Pal)^);
BitImg.Invalidate;
end;
您提供的代码,执行结果很奇怪,具体表现为:procedure TForm1.FormCreate(Sender: TObject);
var
x, y, Gray:Integer;
b, t: PByteArray;
Pal: TMaxLogPalette;
begin
// BitImg是TImage控件,在里面手动载入24位色深的bmp图片,结果可以得到想要的1位色深bmp图片
BitImg.Picture.Bitmap.PixelFormat := pf1bit; LongWord(Pal.palPalEntry[0]) := $000000;
LongWord(Pal.palPalEntry[1]) := $ffffff;
Pal.palVersion := $300;
Pal.palNumEntries := 2;
BitImg.Picture.Bitmap.Palette := CreatePalette(PLogPalette(@Pal)^);
BitImg.Invalidate;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
x, y, Gray:Integer;
b, t: PByteArray;
Pal: TMaxLogPalette;
begin
BitImg.Picture.LoadFromFile('c:\pic24.bmp'); //动态载入24位bmp图片,结果得到的图片全黑
BitImg.Picture.Bitmap.PixelFormat := pf1bit; LongWord(Pal.palPalEntry[0]) := $000000;
LongWord(Pal.palPalEntry[1]) := $ffffff;
Pal.palVersion := $300;
Pal.palNumEntries := 2;
BitImg.Picture.Bitmap.Palette := CreatePalette(PLogPalette(@Pal)^);
BitImg.Invalidate;
end;
动态载入时需要先设置bmp的PixelFormat然后就正常了,非常感谢阿发伯的指导!