社区
界面
帖子详情
位图文件的内容已经读入了内存,怎么显示该位图?
xunknown
2005-08-24 10:58:37
LoadImage已经没有用了.
因为位图文件已经读入了内存.
我是不是要自己分析这个位图文件数据块的内容啊?
有没有简单的方法?
...全文
169
7
打赏
收藏
位图文件的内容已经读入了内存,怎么显示该位图?
LoadImage已经没有用了. 因为位图文件已经读入了内存. 我是不是要自己分析这个位图文件数据块的内容啊? 有没有简单的方法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
吹泡泡的小猫
2005-08-24
打赏
举报
回复
用CreateDIBSection 创建一个HBITMAP
bear_c
2005-08-24
打赏
举报
回复
CBitmap::CreateBitmapIndirect
BOOL CreateBitmapIndirect( LPBITMAP lpBitmap );
Return Value
Nonzero if successful; otherwise 0.
Parameters
lpBitmap
Points to a BITMAP structure that contains information about the bitmap.
将内存中位图信息填充到BITMAP结构中即可创建一个CBitmap对象。
njvisual
2005-08-24
打赏
举报
回复
CDC *pDC=GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
HDC phDC = pDC->GetSafeHdc();//获得pStaic的HDC
HANDLE hBitmap = ::LoadImage(NULL, strMapFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE |
LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
ASSERT(hBitmap);
HANDLE OldBitmap=(HBITMAP)MemDC.SelectObject(hBitmap);
pDC->BitBlt(0,0,1100,1100,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
guxingfeiyu
2005-08-24
打赏
举报
回复
WINGDIAPI int WINAPI StretchDIBits(
HDC hdc,
int XDest,
int YDest,
int nDestWidth,
int nDestHeight,
int XSrc,
int YSrc,
int nSrcWidth,
int nSrcHeight,
CONST VOID *lpBits,
CONST BITMAPINFO *lpBitsInfo,
UINT iUsage,
DWORD dwRop
);
xunknown
2005-08-24
打赏
举报
回复
void DisplayBimap( char * pBuffer, CWnd * pWnd, CRect * pRect )
{
if ( !pBuffer )
{
return;
}
ASSERT( pWnd );
if ( !::IsWindow(pWnd->m_hWnd) )
{
return;
}
CDC * pDC = pWnd->GetDC();
ASSERT( pDC );
if ( !pDC )
{
return;
}
CRect rect;
if ( !pRect )
{
pWnd->GetClientRect( &rect );
pRect = ▭
}
//// 显示位图
LONG bmpWidth;
LONG bmpHeight;
DWORD bfOffBits;
WORD biBitCount;
void *pBmpInfo;
void *lpvBufBmp;
bfOffBits = *( DWORD* )( pBuffer + 10 );
bmpWidth = *( LONG* )( pBuffer + 18 );
bmpHeight = *( LONG* )( pBuffer + 22 );
lpvBufBmp = pBuffer + bfOffBits;
pBmpInfo = pBuffer + 14;
biBitCount = *( WORD* )( pBuffer + 28 );
BITMAPINFO bmpInfo;
memcpy( &bmpInfo.bmiHeader, pBmpInfo, 40 );
bmpInfo.bmiHeader.biSize = sizeof( BITMAPINFOHEADER );
#if 1
::StretchDIBits( pDC->m_hDC,
pRect->left, pRect->top, pRect->Width(), pRect->Height(),
0, 0, bmpWidth, bmpHeight,
lpvBufBmp, &bmpInfo, DIB_RGB_COLORS, SRCCOPY );
#else
BITMAP bitmap;
bitmap.bmType = 0;
bitmap.bmWidth = bmpInfo.bmiHeader.biWidth;
bitmap.bmHeight = bmpInfo.bmiHeader.biHeight;
bitmap.bmWidthBytes = bmpInfo.bmiHeader.biWidth * bmpInfo.bmiHeader.biBitCount / 8;
bitmap.bmPlanes = bmpInfo.bmiHeader.biPlanes;
bitmap.bmBitsPixel = bmpInfo.bmiHeader.biBitCount;
bitmap.bmBits = lpvBufBmp;
//// HBITMAP hbitmap = ::CreateBitmapIndirect( &bitmap );
HBITMAP hbitmap = ::CreateBitmap( bmpWidth, bmpHeight, bitmap.bmPlanes, bitmap.bmBitsPixel, bitmap.bmBits );
DisplayBimap( hbitmap, pWnd, pRect );
DeleteObject( hbitmap );
#endif
}
这样写的函数显示出来的图片不正常
我应该怎么更正?
xunknown
2005-08-24
打赏
举报
回复
我的函数是
DisplayBitmap( const char * pBuffer, size_t szSize, CWnd * pWnd )
{
pBuffer所指向的内容就是一个完整的BMP文件的内容
我要把这个BMP显示在pWnd上.
我怎么样把pBuffer的数据传给CreateDIBSection?
}
benbebnmao
2005-08-24
打赏
举报
回复
对,用CreateDIBSection(),返回一个HBITMAP,然后再HBITMAP)MemDC.SelectObject(hBitmap),
最后bitblt().就可以了
这些函数的具体用法看msdn吧。很简单的
VC++6.0 打开
位图
文件
源代码 BMP图像数据的读取与
显示
VISUAL C++ 6.0 数字图像编码 图像数据的读取与
显示
可直接运行 并附源代码
vc.rar_VC
位图
显示
_
位图
显示
_
显示
直方图
读入
位图
,
显示
位图
的直方图,并可做直方图均衡,vc++6.0编译完成,有源码和exe文件
Windows游戏编程系列之1:GUI窗口界面编程及游戏入门实战
位图
简介 38 1)在资源中添加
位图
资源 39 2)从资源中加载
位图
: LoadBitmap 39 3)创建一个与当前DC相匹配的DC(
内存
DC) 39 4)将bitmap放入匹配的DC中:SelectObject 40 5)成像(1:1 比例 ) 40 6)取出
位图
40...
详说如何用C,C++和JAVA
读入
和保存
位图
有
位图
文件
结构的详细介绍,
已经
用C,C++和JAVA进行
读入
和保存
位图
等相关操作
用C#进行
位图
的
读入
、保存和处理
用C#进行
位图
的
读入
、保存和处理
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章