VC++关于如何用GDI+取得图片的Hbitmap

Image image(L"demo.jpg");
载入图片之后,如何取得该图片的hbitmap呢?请教~~~

第1个回答  推荐于2016-04-19

没有简单直接的办法。

比较曲折的办法有两个,一个是通过DC绘制获取:

Image* pImage = Image::FromFile(L"c:\\test.gif");
Status status = pImage->GetLastStatus();
if(Ok == status)
{
   CDC dc;
   dc.CreateCompatibleDC(NULL);
   CBitmap bitmap;
   bitmap.CreateCompatibleBitmap(&dc, pImage->GetWidth(), pImage->GetHeight());
   CBitmap* pbmpOld = dc.SelectObject(&bitmap);

   Graphics graphics(dc.m_hDC);
   status = graphics.GetLastStatus();
   if(Ok == status)
   {
      graphics.DrawImage(pImage, 0, 0);
      // enjoy of bitmap;
   }
   dc.SelectObject(pbmpOld);
}

一个是用同样是GDI+的Bitmap重新读取文件或读取Image保存的文件:

Bitmap* pBitmap = Bitmap::FromFile(L"c:\\test.gif");
Status status = pBitmap->GetLastStatus();
if(Ok == status)
{
   HBITMAP hBitmap = NULL;
   status = pBitmap->GetHBITMAP(Color(0,0,0), &hBitmap);
   if(Ok == status)
   {
      // enjoy of bitmap;
   }
}

本回答被提问者采纳
第2个回答  推荐于2016-05-12
Bitmap* pBitmap = Bitmap::FromFile(L"c:\\test.gif");
Status status = pBitmap->GetLastStatus();
if(Ok == status)
{
   HBITMAP hBitmap = NULL;
   status = pBitmap->GetHBITMAP(Color(0,0,0), &hBitmap);
   if(Ok == status)
   {
      // enjoy of bitmap;
   }
}

VC++关于如何用GDI+取得图片的Hbitmap
没有简单直接的办法。比较曲折的办法有两个,一个是通过DC绘制获取:Image* pImage = Image::FromFile(L"c:\\\\test.gif");Status status = pImage->GetLastStatus();if(Ok == status){ CDC dc; dc.CreateCompatibleDC(NULL); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc,...

C++ 怎么能得到一张照片的字节数组,jpg或者png格式的都可以
1,加载一张图片,使用GDI+的Bitmap类,创建一个对象,Bitmap *bitmap=Bitmap::FromFile("example.png");2,从Bitmap对象中获得HBITMAP句柄,HBITMAP句柄指向位图,HBITMAP hBMP; bitmap->GetHBITMAP(NULL,hBMP);3,从句柄中找到位图结构体,位图结构体(BITMAP)包含了关于位图的所有信息 BIT...

求助:GDI+中 Bitmap:GetHBITMAP 的使用问题
使用GDI+中Bitmap类打开一幅图象后,需要将头结构数据取出,使用 Graphics graphics (GetSafeHwnd (), FALSE);Bitmap myBitmap (L"abc.jpg", FALSE);Color backColor;HBITMAP HBitmap;myBitmap.GetHBITMAP(backColor, &HBitmap);LPSTR lpInfo = (LPSTR) GlobalLock(HBitmap);error = GetLastErr...

关于GDI,怎样通过 HDC 获取 DC 当前的 HBITMAP
HBITMAP bmp=GetCurrentObject(hdc,OBJ_BITMAP);这样就好

C++ WTL中怎么加载外部的图片显示到PICTRUE或者其他控件上,不是添加到...
我这里有个源代码例子,可以用GDI+的接口,将指定路径的图片,加载到内存中。这里有个WTL GDI+的代码,你试试,指定好路径及文件类型。ATLINLINE HBITMAP AtlLoadGdiplusImage(ATL::_U_STRINGorID bitmap, ATL::_U_STRINGorID type = (UINT) 0){ USES_CONVERSION; static bool s_bInitied...

在使用mfc中载入bmp图像带,怎么做?
用GDI+解决这个问题比较容易,一个循环,每次新建1个HBITMAP(MFC里面新建CBitmap以后应该可以从中获得HBITMAP),然后从HBITMAP创建Graphics对象,用DrawImage方法把你这个图像带的一个部分画进去(DrawImae的参数里你可以指定要画哪个部分),完了调用一下Graphics的Flush方法。循环四次就把四个图像分开...

C++函数GetDIBits怎么用???
HBITMAP是常用的GDI对象,而GetDIBits可以从一个HBITMAP对象中获得其对应的位数据。其原型如下:int GetDIBits( HDC hdc, \/\/ handle to DC hdc, \/\/ handle to DC HBITMAP hbmp, \/\/ handle to bitmap UINT hbmp, \/\/ handle to bitmap UINT uStartScan, \/\/ first scan line to set U...

怎样在VC++中加载显示PNG图片,处理这样的图片需要要什么类?谢谢!_百度...
介绍一种最简单的办法。用 CImage 类的 Load 函数加载图片,之后用 Detach 取得 HBITMAP 句柄。取得图片的HBITMAP 句柄后就可以像操作 BMP 图片一样处理 JPG \/ JPEG \/ GIF \/ PNG 格式的图片了。具体代码如下:include “atlimage.h”CImage img;HRESULT ret = img.Load(filename ); \/\/ file...

【高分求救】VC++下如何载入一张位图并获取该位图的像素值
获取位图可以用GetBitmapBits()DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits ) const;CBitmap::GetBitmap int GetBimap( BITMAP* pBitMap );返回值:调用成功时返回非零值,否则为0。参数: pBitMap 指向BITMAP结构的一个指针,不能为NULL。说明:本函数用于查看CBitmap对象的信息。返回...

VC用IPicture实现BMP转JPG\/GIF。
HBITMAP hBitmap=HBITMAP(m_pDoc->m_Bmp1);\/\/获得位图的句柄 HGDIOBJ hOldBMP = ::SelectObject(m_MemDC1,hBitmap); \/\/把该位图选入内存DC \/\/加载选中图片到内存 if(m_ImagePath==_T("default"))m_Picture.Load(IDR_DEFAULT,_T("JPG"));else m_Picture.Load(m_ImagePath)...

相似回答