如题,请高手帮帮忙。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    Green, Blue ,Red :byte;
    i: integer;
    begin
     if  Image1.Canvas.Pixels[0,0] = clWhite then
        ShowMessage('白');
      //取各个颜色值
      i := image1.Canvas.Pixels[0,0];
      Blue := GetBValue(i);
      Green := GetGValue(i);
      Red := GetRValue(i);end;procedure TForm1.Button2Click(Sender: TObject);
    var
      i, j:integer;
    begin
      for i:= 0 to Image1.Width do
        for j:= 0 to Image1.Height do
        begin
          if Image1.Canvas.Pixels[i,j] <> clWhite then
          begin
            ShowMessage('含有非白色');
            Exit;
          end;
        end;
    end;
      

  2.   

    楼上用Pixels是最慢的了,早已经过时,用在小图片(比如图标大小)还差不多,现在游行用ScanLine:
    function BmpIsWhile(bmp: TbitMap): boolean;
    type
      PRGBTripleArray = ^TRGBTripleArray;
      TRGBTripleArray = array[0..32767] of TRGBTriple;
    var
      x, y: integer;
      p0: PRGBTripleArray;
      sBmp, dBmp: TBitMap;
    begin
      Result := False;
      Bmp.PixelFormat := pf24bit;
      for y := 0 to Bmp.Height - 1 do
      begin
        p0 := Bmp.ScanLine[y];
        for x := 0 to Bmp.Width - 1 do
          if (p0[x].rgbtBlue = 255) and
            (p0[x].rgbtGreen = 255) and
            (p0[x].rgbtRed = 255) then
          begin
            Result := True;
          end
          else
          begin
            Result := False;
            Exit;
          end;
      end;
    end;  if BmpIsWhile(Image1.Picture.Bitmap) then
        showmessage('图片是白色');
      

  3.   

    刚好也做了个这样的检查程序,不过我是查某个区域是否是全黑,用的 ScanLine,感觉速度还可以啊。
      

  4.   

    如果图片是某种压缩格式(比如,图片是Jpeg)的话,数据就会少很多,检测肯定也会减少很多时间……
      

  5.   

    哪个说是用压缩格式,会减少时间
    毛哟,
    图像的显示最后都要转成RGB对应的
    如果觉得用ScanLine慢了
    你可以开几个线程一起判断三
      

  6.   

    ScanLine速度是比较快的了,更快的我没看到过(主要是我不搞这一行)
      

  7.   

    用ScanLine在读取的时候会快一些,
    但是还是得每个象素都读一遍可以试试用散列的方式,
    ScanLine读取一行以后,用一定的算法得出每一行的校验码
    然后拿校验码来进行比较
      

  8.   

    要判断一张bmp图片是全白色,一点其它颜色也没有,只得老老实实地检测每一个像素了.
    不过,一点一点地从显存读数据确是很慢的,应该用Scanline来整行整行读数据,
    如要更快,可把整个图像由文件直接读到内存,再来查每一行每一个像素.