社区
界面
帖子详情
位图文件的内容已经读入了内存,怎么显示该位图?
xunknown
2005-08-24 10:58:37
LoadImage已经没有用了.
因为位图文件已经读入了内存.
我是不是要自己分析这个位图文件数据块的内容啊?
有没有简单的方法?
...全文
213
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吧。很简单的
BMP文件解析及
显示
在LCD上
显示
内容
时,常有
显示
bmp文件的需求。本文介绍BMP文件格式,它由
位图
文件
头、
位图
信息头和颜色点阵数据组成,颜色数据排列顺序与LCD
显示
顺序不同,解析时需调整。还提及了头文件和C文件的代码实现。
vc
显示
DIB
本文介绍了
显示
DIB的两种方法:一种是将
位图
文件
直接
读入
内存
并使用StretchDIBits()函数
显示
;另一种是通过CreateDIBitmap()、SetDIBitmap()、BitBlt()等函数将DIB转换为DDB并在
显示
屏上
显示
。
BMP
位图
文件
结构及VC操作 (转)
本文介绍BMP
位图
文件
结构及其在VC中的操作方法,包括文件头、
位图
信息头、颜色表等
内容
,并对比了普通
显示
方法与采用视频函数
显示
位图
的不同,后者能够减少
内存
占用并提高
显示
质量。
BMP
位图
文件
结构及VC操作
本文详细介绍了BMP
位图
文件
的结构组成,包括文件头、
位图
信息头、颜色表和
位图
数据等
内容
,并探讨了两种
位图
显示
方法:普通
显示
方法和使用视频函数
显示
的方法。后者能显著提高
显示
速度并减少
内存
占用。
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章