社区
界面
帖子详情
位图文件的内容已经读入了内存,怎么显示该位图?
xunknown
2005-08-24 10:58:37
LoadImage已经没有用了.
因为位图文件已经读入了内存.
我是不是要自己分析这个位图文件数据块的内容啊?
有没有简单的方法?
...全文
180
7
打赏
收藏
位图文件的内容已经读入了内存,怎么显示该位图?
LoadImage已经没有用了. 因为位图文件已经读入了内存. 我是不是要自己分析这个位图文件数据块的内容啊? 有没有简单的方法?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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 数字图像编码 图像数据的读取与
显示
可直接运行 并附源代码
读取并
显示
位图
,直接操纵
显示
图像数组中的每一位像素
非常好的数字图像处理入门代码,对于深入理解BMP文件的结构非常有帮助,详细演示了stretchdibits函数的用法,不用微软的CBitmap类,直接操纵
显示
图像数组中的每一位像素。
MFC读
位图
像素到二维数组,将数组中像素
显示
位图
能读BMP
位图
的像素到二维数组,二维数组是动态申请的。将
读入
的二维数组中的像素
显示
出来,看是否与原图相符合,并且将像素点的值写入data.txt文本文档
raw-bmp.rar_Matlab bmp转raw_RAW_raw图转bmp文件_raw格式转换bmp_raw转bmp
RAW格式转化BMP格式程序:打开原始图像文件,申请512字节的
内存
空间,图像
读入
,创建新的图像 ,
位图
图像文件的基本格式:
位图
文件
头、
位图
信息头、彩色表 、
位图
数据。一共四部分。
易语言图片快速分割
易语言图片快速分割源码系统结构:取
内存
位图
局部
位图
,A2W,转换图像格式,转换图像格式2,复制
内存
_复制
位图
信息头到字节集,复制
内存
_复制
位图
文件
头到字节集,GdiplusStartup,GdiplusShutdow
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章