我得到了一个Pbyte类型的图片,可是如何将它存入到Tbimap类型中呢,我需要做一些后期处理。

解决方案 »

  1.   

    什么意思???????
    要保存到数据库中吗>>>>>>>>>
      

  2.   

    你要知道这缓冲区的图片的宽,高,位深,才能正确显示出来
    给你个例子看下,ph 里包含了这些信息function OnPreview(ph : PBitmapInfoHeader; buff: pbyte): HRESULT; stdcall;
      var dc : HDC;
          iw,ih : Integer;
          bmp : TGpBitmap;
          bd : TBitmapData;
          gp : TGpGraphics;
    begin
      dc := GetDC(form1.pnlDc.Handle);
      bmp := TGpBitmap.Create(ph^.biWidth,ph^.biHeight,pf24bppRGB);
      bd := bmp.LockBits(GpRect(0,0,bmp.Width,bmp.Height),[imRead],pf24bppRGB);
      CopyMemory(bd.Scan0,buff,bd.Height * bd.Stride);
      bmp.UnlockBits(bd);
      bmp.RotateFlip(rfX180);
      iw := form1.pnlDc.Width;
      ih := Round(ph^.biHeight * iw/ph^.biWidth);
    //  StretchDIBits(dc,0,0,iw,ih,0,0,ph^.biWidth,ph^.biHeight,buff,pBITMAPINFO(ph)^,DIB_RGB_COLORS, SRCCOPY);//拉伸显示时效果不好,所以用TGPBITMAP类来转换
      gp := TGpGraphics.Create(dc);
      gp.DrawImage(bmp,GpRect(0,0,iw,ih),0,0,bmp.Width,bmp.Height,utPixel);
      FreeAndNil(bmp);
      FreeAndNil(gp);
      ReleaseDC(Form1.pnlDc.Handle,dc);
    end;