用File|Open打开一个bmp文件,显示在客户区
是不是有两中方法:1)用API函数loadimage和BitBlt函数
2)直接对bmp解码
请高手能不能把二种方法具体到细节都贴出来,有没有源程序(只关于bmp的)?
thx........
是不是有两中方法:1)用API函数loadimage和BitBlt函数
2)直接对bmp解码
请高手能不能把二种方法具体到细节都贴出来,有没有源程序(只关于bmp的)?
thx........
解决方案 »
- 关于创建线程内核对象计数(感觉释放资源很重要的)
- 解释下这个.
- 各位高手过来看看,也许这事你们都没有考虑过的技术问题!
- RegSaveKey和RegRestoreKey老是返回1314错误,怎么办?
- Programming Server-Side Applications for Microsoft Windows 2000 源码
- 如何用c语言给一个文本文件加密???
- 多线程问题?
- BCGControlBar Pro 17.1 出错
- VC中Dll卸载顺序问题
- 请教高手:怎样把ascii值转换成ascii字符并存到文件中。
- 'GetProAddress' : undeclared identifier急救!
- 电子警察
CDC* memDC,bmpDC;
m_pbmp->LoadBitmap(......);
OnDraw()中
memDC=pDC->CreateCompatibleDC(pDC);
m_pbmp->CreateCompatibleBitmap(memDC);
pDC->Bitblt(......);
RECT wrect;
MemDC.CreateCompatibleDC(pDC);
GetClientRect(&wrect);
HBITMAP bitmap;
int cx=wrect.right-wrect.left;
int cy=wrect.bottom-wrect.top;
bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),"inte3.BMP",IMAGE_BITMAP,cx/10,cy/10,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
HBITMAP OldBitmap;
OldBitmap=(HBITMAP)MemDC.SelectObject(bitmap);
///显示它
// CSize size=bitmap
pDC->BitBlt(0,0,cx,cy,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
其中inte3.bmp为bmp文件名,如不在当前目录下要有路径。pDC为CDC类。
第二种方法也不难,主要用到BMP文件的结构,先自定义一下BMP的结构:
//位图结构
typedef struct BITMAP_FILE_TAG
{
BITMAPFILEHEADER BitFileHeader; //此变量包含位图文件的头
BITMAPINFOHEADER BitInfoHeader; //所有的调色板的信息
PALETTEENTRY palette[256]; //我们将把调色板存到这里
UCHAR *buffer; //这是指向数据的指针
}BITMAP_FILE,*LPBITMAP_FILE;
然后用OpenFile打开文件,_lread读进文件信息。最后用memcpy将文件拷贝到内存中就OK了。
还有,这些函数放在那个函数中?
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"BMP File|*.bmp||", this);
domodal后
dlg.GetPathName();返回所选文件路径
那么loadimage放在那儿?
bitblt放在那儿?
有没有源程序发给我: [email protected]
<a href="mailto:[email protected]">[email protected]</a>
thx.......
if(fdlg.DoModal()==IDOK)
{
BITMAP bmp;
CClientDC dc(this);
CString FileName=fdlg.GetFileName();
HBITMAP m_hDisplay= (HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION|LR_DEFAULTSIZE);
GetObject(m_hDisplay,sizeof(bmp),&bmp);
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
HBITMAP hold=(HBITMAP)MemDC.SelectObject(m_hDisplay);
dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(hold);
DeleteDC(MemDC);
DeleteDC(dc); }
但是CClientDC dc(this)有错误:D:\Application\Microsoft Visual Studio\MyProjects\App2\App2Doc.cpp(108) : error C2664: 'CClientDC::CClientDC' : cannot convert parameter 1 from 'class CApp2Doc *const ' to 'class CWnd *'
把 dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(hold);
pDoc->BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(hold);
DeleteDC(MemDC);
DeleteDC(dc);
谢了!
D:\Application\Microsoft Visual Studio\MyProjects\App2\App2Doc.cpp(117) : error C2039: 'BitBlt' : is not a member of 'CApp2Doc'
HBITMAP logo= LoadBitmap(hInstance, MAKEINTRESOURCE(ID_LOGO));
dc = GetDC(hwnd);HBITMAP bottom = CreateCompatibleBitmap(dc, 256, 115);
sdc = CreateCompatibleDC(dc);
SelectObject(sdc, logo);
ddc = CreateCompatibleDC(dc);
SelectObject(ddc, logo);
for(i=0; i < 256; i++)
{
BitBlt(ddc, i, 0, 1, 115, sdc, 200, 260, SRCCOPY);
}ReleaseDC(hwnd, dc);
DeleteDC(sdc);
DeleteDC(ddc);
bitblt不是pDoc的成员函数