怎样读取硬盘上指定位置的位图文件?(VC) HBITMAP bitmap;bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"SAMPLE.BMP",IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);ASSERT(bitmap); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HBITMAP m_hBmp1; m_hBmp1 = (HBITMAP)LoadImage(NULL, "c:\\123.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); 绘制DrawBitmap( &dc, m_hBmp1, NULL, 0, 0 );void DrawBitmap( CDC *pDC, HBITMAP hBitmap, HPALETTE hPal, int xDest, int yDest ){ // Get logical coordinates BITMAP bm; ::GetObject( hBitmap, sizeof( bm ), &bm ); CPoint size( bm.bmWidth, bm.bmHeight ); pDC->DPtoLP(&size); CPoint org(0,0); pDC->DPtoLP(&org); // Create a memory DC compatible with the destination DC CDC memDC; memDC.CreateCompatibleDC( pDC ); memDC.SetMapMode( pDC->GetMapMode() ); //memDC.SelectObject( &bitmap ); HBITMAP hBmOld = (HBITMAP)::SelectObject( memDC.m_hDC, hBitmap ); // Select and realize the palette if( hPal && pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE) { SelectPalette( pDC->GetSafeHdc(), hPal, FALSE ); pDC->RealizePalette(); } pDC->BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY); ::SelectObject( memDC.m_hDC, hBmOld );} Method 1: HBITMAP CDandelionDlg::BufferToBITMAP(LPSTR path){ LPSTR p; DWORD size; CFile pf; pf.Open(path,CFile::modeRead); size=pf.GetLength(); p=new char[size]; pf.ReadHuge(p,size); pf.Close(); HBITMAP hBmp; LPSTR hDIB,lpBuffer=p; LPVOID lpDIBBits; BITMAPFILEHEADER bmfHeader; DWORD bmfHeaderLen; bmfHeaderLen=sizeof(bmfHeader); strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen); if(bmfHeader.bfType!=((WORD)('M'<<8)|'B'))return NULL; hDIB=lpBuffer+bmfHeaderLen; BITMAPINFOHEADER &bmiHeader=*(LPBITMAPINFOHEADER)hDIB; BITMAPINFO &bmInfo=*(LPBITMAPINFO)hDIB; int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1<<bmiHeader.biBitCount; if(bmInfo.bmiHeader.biBitCount>8) lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+ ((bmInfo.bmiHeader.biCompression==BI_BITFIELDS) ? 3 : 0)); else lpDIBBits=(LPVOID)(bmInfo.bmiColors+nColors); CClientDC dc(this); hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); delete[] p; return hBmp;}Method 2: CoInitialize(NULL); CComQIPtr<IPicture> ppic; PICTDESC pd; ZeroMemory(&pd,sizeof(PICTDESC)); pd.cbSizeofstruct=sizeof(PICTDESC); pd.picType=PICTYPE_BITMAP; CFile pf; pf.Open("c:\\008.jpg",CFile::modeReadWrite); CArchive::bNoFlushOnDelete),sr(&sf,CArchive::store); CArchiveStream arcstream(&ar),src(&sr); OleLoadPicture((IStream*)(&arcstream),0, FALSE,IID_IPicture,(void**)&ppic); assert(ppic); RECT r; GetWindowRect(&r); CRect rect(r); long height,width; ppic->get_Height(&height); ppic->get_Width(&width); ppic->Render(::GetDC(0),rect.left,rect.top,rect.Width(),rect.Height(),0,height,width,-height,&rect); ppic.Release(); CoUninitialize();//#include <assert.h>//#include <afxpriv2.h> HBITMAP m_hBitmap;m_hBitmap=(HBITMAP)LoadImage(NULL,lpszImageFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);那个句柄只用来标识该在那个范围里读取,如果从磁盘文件读取,我就把她设为NULL 建议使用IPicture接口来读,正在研究这个接口。 BOOL LoadBitmap(LPCTSTR lpszResourceName); 代码编辑器推荐 HTTP80端口是哪个协议端口? 线程启动时间100ms,正常吗 自定义 复制 粘贴 我做的一份设想:未来的家电&pc一体化!!!在takee.tk automation 服务器不能创建对象 怎么解决啊 如何判断一条直线与矩形和椭圆相交? csdn还差一点动力! 谈谈超级解霸是怎样做的? 这段代码为什么不能将菜单变灰??? 如果一位图画在背景上,以50次/秒的速度刷新,有没有可能不闪烁??? 关于内存拷贝的问题,请帮忙!
m_hBmp1 = (HBITMAP)LoadImage(NULL, "c:\\123.bmp", IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE); 绘制
DrawBitmap( &dc, m_hBmp1, NULL, 0, 0 );
void DrawBitmap( CDC *pDC, HBITMAP hBitmap, HPALETTE hPal, int xDest, int yDest )
{
// Get logical coordinates
BITMAP bm;
::GetObject( hBitmap, sizeof( bm ), &bm );
CPoint size( bm.bmWidth, bm.bmHeight );
pDC->DPtoLP(&size); CPoint org(0,0);
pDC->DPtoLP(&org); // Create a memory DC compatible with the destination DC
CDC memDC;
memDC.CreateCompatibleDC( pDC );
memDC.SetMapMode( pDC->GetMapMode() );
//memDC.SelectObject( &bitmap );
HBITMAP hBmOld = (HBITMAP)::SelectObject( memDC.m_hDC, hBitmap );
// Select and realize the palette
if( hPal && pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE)
{
SelectPalette( pDC->GetSafeHdc(), hPal, FALSE );
pDC->RealizePalette();
}
pDC->BitBlt(xDest, yDest, size.x, size.y, &memDC, org.x, org.y, SRCCOPY); ::SelectObject( memDC.m_hDC, hBmOld );
}
HBITMAP CDandelionDlg::BufferToBITMAP(LPSTR path)
{
LPSTR p;
DWORD size;
CFile pf; pf.Open(path,CFile::modeRead);
size=pf.GetLength();
p=new char[size];
pf.ReadHuge(p,size);
pf.Close();
HBITMAP hBmp;
LPSTR hDIB,lpBuffer=p;
LPVOID lpDIBBits;
BITMAPFILEHEADER bmfHeader;
DWORD bmfHeaderLen; bmfHeaderLen=sizeof(bmfHeader);
strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen);
if(bmfHeader.bfType!=((WORD)('M'<<8)|'B'))return NULL;
hDIB=lpBuffer+bmfHeaderLen;
BITMAPINFOHEADER &bmiHeader=*(LPBITMAPINFOHEADER)hDIB;
BITMAPINFO &bmInfo=*(LPBITMAPINFO)hDIB;
int nColors=bmiHeader.biClrUsed ? bmiHeader.biClrUsed : 1<<bmiHeader.biBitCount;
if(bmInfo.bmiHeader.biBitCount>8)
lpDIBBits=(LPVOID)((LPDWORD)(bmInfo.bmiColors+bmInfo.bmiHeader.biClrUsed)+
((bmInfo.bmiHeader.biCompression==BI_BITFIELDS) ? 3 : 0));
else
lpDIBBits=(LPVOID)(bmInfo.bmiColors+nColors);
CClientDC dc(this);
hBmp=CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,&bmInfo,DIB_RGB_COLORS); delete[] p;
return hBmp;
}Method 2:
CoInitialize(NULL);
CComQIPtr<IPicture> ppic;
PICTDESC pd;
ZeroMemory(&pd,sizeof(PICTDESC));
pd.cbSizeofstruct=sizeof(PICTDESC);
pd.picType=PICTYPE_BITMAP;
CFile pf;
pf.Open("c:\\008.jpg",CFile::modeReadWrite);
CArchive::bNoFlushOnDelete),sr(&sf,CArchive::store);
CArchiveStream arcstream(&ar),src(&sr);
OleLoadPicture((IStream*)(&arcstream),0, FALSE,IID_IPicture,(void**)&ppic);
assert(ppic);
RECT r;
GetWindowRect(&r);
CRect rect(r);
long height,width;
ppic->get_Height(&height);
ppic->get_Width(&width);
ppic->Render(::GetDC(0),rect.left,rect.top,rect.Width(),rect.Height(),0,height,width,-height,&rect);
ppic.Release();
CoUninitialize();
//#include <assert.h>
//#include <afxpriv2.h>
m_hBitmap=(HBITMAP)LoadImage(NULL,lpszImageFile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
那个句柄只用来标识该在那个范围里读取,如果从磁盘文件读取,我就把她设为NULL