1,183
社区成员
发帖
与我相关
我的任务
分享
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;
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;
var
BitMap: TBitmap;
begin
BitMap := TBitmap.Create;
BitMap.PixelFormat := pf1bit;
BitMap.Assing(BitImg.Picture.Bitmap);
end;