本人想通过非getpixel函数取色
本来准备BitBlt +tbitmap方式实现!可是tbitmap在每秒创建100次的时候 CPU消耗很大
于是我想通过下面方式实现
procedure TForm1.Timer1Timer(Sender: TObject);
var
 DC:HDC;
 Bitmap:HBitmap;
 Buff:array[0..2] of Byte;
 bitinf:tagBITMAPINFO;
begin
Buff[0]:=0 ;
Buff[1]:=0 ;
Buff[2]:=0 ; DC:=GetDC(0);
 StretchDIBits(DC,
               0,
               0,
               1,
               1,
               Mouse.CursorPos.X,
               Mouse.CursorPos.Y,
               1,
               1,
               @buff,
               bitinf,
               DIB_RGB_COLORS,
               SrcCopy);
 ReleaseDC(0,DC);
 Form1.Color:=RGB(Buff[2],Buff[1],Buff[0]);
end;提取结果发现Buff并没有被StretchDIBits过程赋值  请问如何解决呢?

解决方案 »

  1.   

    procedure TForm1.Timer1Timer(Sender: TObject);
    var
     DC:HDC;
     Bitmap:HBitmap;
     Buff:array[0..2] of Byte;
     bmiHeader:BITMAPINFOHEADER;
     info:tagBITMAPINFO;
    begin
    Buff[0]:=0;
    Buff[1]:=0;
    Buff[2]:=0;
     DC:=GetDC(0);
    bmiHeader.biSize :=sizeof(BITMAPINFOHEADER);
    bmiHeader.biWidth := -1;
    bmiHeader.biHeight := -1;
    bmiHeader.biPlanes := 1;
    bmiHeader.biBitCount := 24;
    bmiHeader.biCompression := BI_RGB;
    bmiHeader.biSizeImage := 0;
    bmiHeader.biXPelsPerMeter := 0;
    bmiHeader.biYPelsPerMeter := 0;
    bmiHeader.biClrUsed := 0;
    bmiHeader.biClrImportant := 0;
    info.bmiHeader:=bmiHeader; StretchDIBits(DC,
                   Mouse.CursorPos.X,
                   Mouse.CursorPos.Y,
                   1,
                   1,
                   0,
                   0,
                   0,
                   0,
                   @buff,
                   info,
                   DIB_RGB_COLORS,
                   SrcCopy);
     ReleaseDC(0,DC);
     Form1.Color:=RGB(Buff[2],Buff[1],Buff[0]);
    end;我这样写 还是没有效果
      

  2.   

    用一个全局变量 Bitmap, 仅在程序初始化时创建,程序结束时Free.
      

  3.   

    你的代码有Bug.
    你似乎应该把源窗口句柄作为GetDC的参数。你到底是要从哪里读取图像信息呢?你的图像怎么传送给StretchDIBits呢?我找了半天,也没有找到的原始图像数据的传送代码。