今天是一个值记念的日子,感谢CSDN客服人员,帮我找回了这个遗忘了接近20年的帐号。 谢谢!
Delphi已不在像当年那样的流行。 我的工作也在这20年来发生了巨大的改变。重心也从纯平台软件开发转向了硬件电路和单片机程序的开发。 目前从事汽车方面的一些控制开发。
但是无可否认,Delphi是window平台,最方便的用于上位机开发的强大可视化IDE。在20年来的开发工作中,我开发了无数的扩展组件,在通信控制方面,delphi给我的调试任务带来了巨大的帮助。然它已老去是一个不争的事实。
Lazarus一个类Delphi的Object Pascal IDE,引起了我的注意。 跨平台编译。 对于delphi老古董来讲,能很容易的过渡过去。
以下是一个图像二值化的处理。相对于delphi中代码有一点点不一样。 也不能直接使用 PixelFormat 去改变图像的位数。
type
Trgb24 = packed record
b,g,r,a : byte;
end;
Trgb24scanline = array [word] of Trgb24;
pTrgb24scanline = ^Trgb24scanline;
end;
procedure TFun.Image_Binarize(Bmp:TBitmap;const Threshold:integer);
var
p: pTrgb24scanline;
Gray, x, y: Integer;
begin
bmp.BeginUpdate();
// Bmp.PixelFormat := pf24Bit;
for y := 0 to Bmp.Height - 1 do
begin
p := Bmp.ScanLine[y];
for x := 0 to Bmp.Width - 1 do
begin
//一个象素点三个字节
//Gray:=round(p^[x].b*0.299+P^[x].g*0.587+p^[x].r*0.114);
// Gray:= (p^[x].r*19595 + p^[x].g*38469 + p^[x].b*7472) shr 16;
Gray:=(306*p^[x].r+601*p^[x].g+117*p^[x].b+512) shr 10;
if gray > Threshold then
begin
p^[x].r := 255;
p^[x].g := 255;
p^[x].b := 255;
end else begin
p^[x].r := 0;
p^[x].g := 0;
p^[x].b := 0;
end;
end;
end;
bmp.EndUpdate();
end;