GDI+ 获取图像内存像素指针

来源:互联网 发布:mdf如何导入数据库 编辑:程序博客网 时间:2024/06/08 00:11

  方法1:static Bitmap* FromHBITMAP(HBITMAP hbm, HPALETTE hpal); 

  方法2:static Bitmap* FromBITMAPINFO(  const BITMAPINFO* gdiBitmapInfo, VOID* gdiBitmapData );
 

 

   方法1 关联的时候好像是copy了一份图像像素数据;    Bitmap::LockBits,获取BitmapData,必须是有ImageLockModeUserInputBuf,否则获取的数据有错误;
   方法2 关联的时候好像直接关联操作了关联的像素数据;可以直接操作关联时候的像素指针了;

   方法3 一般Bitmap bitmap(L"LockBitsTest1.bmp") 关联位图,可直接Bitmap::LockBits,无需ImageLockModeUserInputBuf。

 

//
  GDI+ 获取的像素指针: BYTE* pixels = (BYTE*)bitmapData->Scan0; 排列顺序是 从左到右,从上到下;
      (bitmapData->Stride小于0,否则反之;如果ImageLockModeUserInputBuf时,程序员自己设置bitmapData->Stride值(包括bitmapData->Scan0指向的内存空间),不可小于0);

  一般读文件方式得到的像素指针 , 排列顺序是 从左到右,从下到上;
//

 

//  ImageLockModeUserInputBuf实例:

    BitmapData bitmapData;      bitmapData.Stride = 1920 ;    bitmapData.Scan0 = new BYTE[w*h*3];
  Rect rect(0,0, w, h);

 
  ptempBitmap->LockBits(
   &rect,  ImageLockModeRead|ImageLockModeWrite |ImageLockModeUserInputBuf, 

   PixelFormat24bppRGB,  &bitmapData); 

 

   memcpy(pBuffer, (BYTE*)bitmapData.Scan0, BufferLen);    

 

  ptempBitmap->UnlockBits( &bitmapData);
  
  delete bitmapData.Scan0;

原创粉丝点击