hBmp := CreateBitmap(201,200,1,24,nil);
  bmp := TBitmap.Create;
  bmp.Handle := hBmp;
  bmp.Canvas.Pen.Color := clRed;
  bmp.Canvas.Pen.Style := psSolid;
  bmp.Canvas.MoveTo(0,0);
  bmp.Canvas.LineTo(100,100);
  Image1.Canvas.Draw(0,0,bmp);
结果出来的Image1就是白白的一篇.但是我把bmp.savetofile('d:\123.bmp'),用图片软件一看,居然是黑的.大家帮我看看这段代码用什么问题没有.或者给我一段CreateBitmap然后,显示出来的代码.

解决方案 »

  1.   

    你上面的代码用这一句有什么用呢:hBmp := CreateBitmap(201,200,1,24,nil);
    直接用TBitmap创建就行了
    begin
      bmp := TBitmap.Create;
      try
        bmp.width:= ......;
        bmp.heigth:= .....;
        bmp.Canvas.Pen.Color := clRed;
        bmp.Canvas.Pen.Style := psSolid;
        bmp.Canvas.MoveTo(0,0);
        bmp.Canvas.LineTo(100,100);
        Image1.Canvas.Draw(0,0,bmp);
      finally
        bmp.free;
      end;
      

  2.   

    我就是想用
    因为我有一组201x200的位图数据,想把它画在一个Image1上.
    CreateBitmap创建一个24bit位图,然后显示出来,不知道为什么就是不行,CreateCompatibleBitmap就是行的,但是CreatBitmap就是不行.
      

  3.   

    参考这个:procedure TransBmp (bmp1, bmp2 : TBitmap);
       var
            Alto, Ancho                    : integer;
            ScreenDC, MaskDC,
                      SrcDC, DstDC     : HDC; 
            BmpMono, DstBmp       : HBitmap;
    begin
       // Este codigo dibuja el bitmap "bmp2" sobre el
       // bitmap "bmp1" tomando como color trasnparente
       // el color del punto más arriba más a la izquierda.   
       // Se asume que ambos bitmaps son de igual tamaño
       Alto      := bmp1.Width;
       Ancho  := bmp1.Height;
       DstDC := bmp1.Canvas.Handle;
       SrcDC := bmp2.Canvas.Handle;
       // crear bitmap monocromático máscara :
       ScreenDC  := GetDC (0);
       BmpMono := CreateBitmap (Ancho, Alto, 1, 1, nil);
       MaskDC   := CreateCompatibleDC (ScreenDC);
       SelectObject (MaskDC, BmpMono);
       SetBkColor (SrcDC , bmp2.Canvas.Pixels[1,1]);
       BitBlt (MaskDC, 0, 0, Ancho, Alto, SrcDC, 0, 0, SRCCOPY); // COPY
       // dibujar imagen transparente :
       SetBkColor(DstDC, RGB(255, 255, 255));
       SetTextColor(DstDC, RGB(0, 0, 0));
       BitBlt (DstDC, 0, 0, Ancho, Alto, SrcDC, 0, 0, SRCINVERT); // XOR
       BitBlt (DstDC, 0, 0, Ancho, Alto,  MaskDC, 0, 0, SRCAND); // AND
       BitBlt (DstDC, 0, 0, Ancho, Alto, SrcDC, 0, 0, SRCINVERT); // XOR
       // liberar recursos :
       DeleteDC (MaskDC);
       DeleteObject (BmpMono);
       ReleaseDC (0, ScreenDC);
    end