回 帖 发 新 帖 刷新版面

主题:请问bmp.scanline方式下如何判断一个点为白色?如下代码为何找不到白色点位置呢?

for i := 0 to Image1.Picture.Height - 1 do
  begin
    row:= Image1.Picture.Bitmap.ScanLine[i];
    for j := 0 to Image1.Picture.Width - 1 do
      if (row[j].rgbtRed = 255) and
         (row[j].rgbtgreen=255) and 
         (row[j].rgbtblue=255)  then    
         
         showmessage(inttostr(i)+'ddd'+inttostr(j));
    
  end;

我想在找到图片的白色点后,显示一下该点的坐标,为什么这种情况下没有显示?

回复列表 (共4个回复)

沙发

原始循环方法:
for  i:=image1.Picture.Bitmap.Height-1  downto  0  do
   for  j:=image1.Picture.Bitmap.Width-1  downto  0  do
   begin
      //BkColor:=GetPixel(Handle,j,i);  //取得每一象素
      BkColor:=image1.Picture.Bitmap.Canvas.Pixels[j,i];
      if BKColor=clWhitethen

板凳

多谢仁兄相助,不过我想用scanline的方法来实现,能做到吗?

3 楼

var
  i,j : integer;
  BKColor:TColor;
  p:PByteArray;
begin
  image1.Picture.Bitmap.PixelFormat:=pf24Bit; //
  for  i:=image1.Picture.Bitmap.Height-1  downto  0  do
  begin
    p:=image1.Picture.Bitmap.ScanLine[i];
    for  j:=image1.Picture.Bitmap.Width-1  downto  0  do
    begin
        //PixelFormat必须要设置为pf24Bit,下面的BKCOLOR结果才等于Pixels的结果
        BKColor:=p[j * 3] + p[j * 3 + 1] shl 8 + p[j * 3 + 2] shl 16;
      if BKColor=clWhite then

4 楼

万分感谢这位仁兄,总算搞清了概念。

我来回复

您尚未登录,请登录后再回复。点此登录或注册