Lazarus下的图像二值化操作和Delphi稍有不同

今天是一个值记念的日子,感谢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;      

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijinjie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值