社区
图形处理/算法
帖子详情
容易的问题(位图)
huxiaoyong1985
2004-05-06 10:08:05
怎么将硬盘中的位图读到内存?
代码!!!
...全文
47
5
打赏
收藏
容易的问题(位图)
怎么将硬盘中的位图读到内存? 代码!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
bluebohe
2004-05-06
打赏
举报
回复
BOOL SaveBmp(HBITMAP hBitmap, CString FileName)
{
HDC hDC;
//当前分辨率下每象素所占字节数
int iBits;
//位图中每象素所占字节数
WORD wBitCount;
//定义调色板大小, 位图中像素字节大小 ,位图文件大小 , 写入文件字节数
DWORD dwPaletteSize=0, dwBmBitsSize=0, dwDIBSize=0, dwWritten=0;
//位图属性结构
BITMAP Bitmap;
//位图文件头结构
BITMAPFILEHEADER bmfHdr;
//位图信息头结构
BITMAPINFOHEADER bi;
//指向位图信息头结构
LPBITMAPINFOHEADER lpbi;
//定义文件,分配内存句柄,调色板句柄
HANDLE fh, hDib, hPal,hOldPal=NULL;
//计算位图文件每个像素所占字节数
hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
iBits = GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES);
DeleteDC(hDC);
if (iBits <= 1) wBitCount = 1;
else if (iBits <= 4) wBitCount = 4;
else if (iBits <= 8) wBitCount = 8;
else wBitCount = 24;
GetObject(hBitmap, sizeof(Bitmap), (LPSTR)&Bitmap);
bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = Bitmap.bmWidth;
bi.biHeight = Bitmap.bmHeight;
bi.biPlanes = 1;
bi.biBitCount = wBitCount;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrImportant = 0;
bi.biClrUsed = 0;
dwBmBitsSize = ((Bitmap.bmWidth * wBitCount + 31) / 32) * 4 * Bitmap.bmHeight;
//为位图内容分配内存
hDib = GlobalAlloc(GHND,dwBmBitsSize + dwPaletteSize + sizeof(BITMAPINFOHEADER));
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDib);
*lpbi = bi;
// 处理调色板
hPal = GetStockObject(DEFAULT_PALETTE);
if (hPal)
{
hDC = ::GetDC(NULL);
hOldPal = ::SelectPalette(hDC, (HPALETTE)hPal, FALSE);
RealizePalette(hDC);
}
// 获取该调色板下新的像素值
GetDIBits(hDC, hBitmap, 0, (UINT) Bitmap.bmHeight, (LPSTR)lpbi + sizeof(BITMAPINFOHEADER)
+dwPaletteSize, (BITMAPINFO *)lpbi, DIB_RGB_COLORS);
//恢复调色板
if (hOldPal)
{
::SelectPalette(hDC, (HPALETTE)hOldPal, TRUE);
RealizePalette(hDC);
::ReleaseDC(NULL, hDC);
}
//创建位图文件
fh = CreateFile(FileName, GENERIC_WRITE,0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
if (fh == INVALID_HANDLE_VALUE) return FALSE;
// 设置位图文件头
bmfHdr.bfType = 0x4D42; // "BM"
dwDIBSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + dwPaletteSize + dwBmBitsSize;
bmfHdr.bfSize = dwDIBSize;
bmfHdr.bfReserved1 = 0;
bmfHdr.bfReserved2 = 0;
bmfHdr.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + (DWORD)sizeof(BITMAPINFOHEADER) + dwPaletteSize;
// 写入位图文件头
WriteFile(fh, (LPSTR)&bmfHdr, sizeof(BITMAPFILEHEADER), &dwWritten, NULL);
// 写入位图文件其余内容
WriteFile(fh, (LPSTR)lpbi, dwDIBSize, &dwWritten, NULL);
//清除
GlobalUnlock(hDib);
GlobalFree(hDib);
CloseHandle(fh);
return TRUE;
}
bluebohe
2004-05-06
打赏
举报
回复
CBitmap m_bmp;
CDC m_MemDC;
HBITMAP hbitmap=(HBITMAP)LoadImage(0,"g:\\tzg.bmp",IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_MemDC.CreateCompatibleDC (NULL);
m_bmp.Attach(hbitmap);
CBitmap *pBitmap=(CBitmap *)m_MemDC.SelectObject(&m_bmp);
//m_MemDC.TextOut()……
m_MemDC.SelectObject(pBitmap);
SaveBmp(m_bmp,"E:\\tzg.bmp");
m_bmp.Detach();
countryboy
2004-05-06
打赏
举报
回复
1、选择从菜单选择资源中的位图参数,并改变菜单的样式
void CBmpviewDlg::OnOpen()
{
// TODO: Add your command handler code here
CFileDialog dlg(TRUE,NULL,NULL,NULL,"位图文件(*.bmp)|*.bmp");
INT Result=dlg.DoModal();
if(Result==IDOK)
{
HBITMAP hbitmap;
hbitmap=(HBITMAP)::LoadImage(NULL,dlg.GetFileName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
BITMAP bm;
::GetObject(hbitmap,sizeof(BITMAP),&bm);
m_bitmap.DeleteObject(); //调用CGdiObject的DeleteObject函数将以前的BITMAP对象删除。
m_bitmap.Attach(hbitmap);
ShowBitmap();
}
else if(Result==IDCANCEL)
return;
}
void CBmpviewDlg::OnSelectBitmap(UINT nBitmapID, UINT nMenuID)
{
m_pSubMenu=m_pMainMenu->GetSubMenu(0);//
m_pSubMenu->CheckMenuItem(ID_BABY1,MF_UNCHECKED);//设成未选中
m_pSubMenu->CheckMenuItem(ID_BABY2,MF_UNCHECKED);//同上
m_pSubMenu->CheckMenuItem(ID_BABY3,MF_UNCHECKED);//同上
m_pSubMenu->CheckMenuItem(nMenuID,MF_CHECKED);//将传过来的菜单项设成选中
m_bitmap.DeleteObject(); //调用CGdiObject的DeleteObject函数将以前的BITMAP对象删除。
m_bitmap.LoadBitmap(nBitmapID);//载入指定ID的图象资源
//执行显示函数
ShowBitmap();
}
void CBmpviewDlg::ShowBitmap()
{
BITMAP bm;
m_bitmap.GetObject(sizeof(BITMAP),&bm);
CDC *pDC=new CDC;
CClientDC dc(&m_image); //将客户区定为我们的PICTURE控件。
pDC->CreateCompatibleDC(&dc);
pDC->SelectObject(m_bitmap);
//将图片伸缩成我们设定的大小。
dc.StretchBlt(0,0,320,240,pDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
//如果不准备进行缩放可以用BITBLT。
//dc.BitBlt(0,0,bm.bmWidth,bm.bmHeight,pDC,0,0,SRCCOPY);
delete pDC;
}
countryboy
2004-05-06
打赏
举报
回复
HANDLE LoadImage(
HINSTANCE hinst, // 位图实体的句柄,如果是从文件中加载,则此参数为NULL
LPCTSTR lpszName, // 位图文件的源,路径和文件名
UINT uType, // 加载位图的类型,IMAGE_ICON,IMAGE_CURSOR, or IMAGE_BITMAP
int cxDesired, // 象素宽度
int cyDesired, // 象素高度
UINT fuLoad
);
//从资源文件加载是这样
CBitmap m_bitmap; //建立一个位图对象
m_bitmap.DeleteObject(); //调用CGdiObject的DeleteObject函数将以前的BITMAP对象删除。
m_bitmap.LoadBitmap(nBitmapID);//载入指定ID的图象资源nBitmapID是资源的ID。
//从文件加载需要这样
HBITMAP hbitmap;//建立一个位图句柄
hbitmap =(HBITMAP)::LoadImage(NULL,”test.bmp”,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_bitmap.DeleteObject(); //调用CGdiObject的DeleteObject函数将以前的BITMAP对象删除。
m_bitmap.Attach(hbitmap);//把得到的位图句柄附到m_bitmap对象。
导入几张BMP资源
CBitmap m_bitmap; //位图对象
void ShowBitmap(); //显示位图
void OnSelectBitmap(UINT nBitmapID,UINT nMenuID); //从菜单选择资源中的位图参数
//nBitmapID是位图资源的ID, nMenuID是菜单资源的ID
huxiaoyong1985
2004-05-06
打赏
举报
回复
感动
CvvImage.zip类文件
在MFC框架下,Picture控件是一个常见的组件,用于显示
位图
、元文件或其他图形。在OpenCV 2.2之后不再支持CvvImage的情况下,开发者需要寻找其他方式来将OpenCV处理后的图像显示到这些控件中。一种可能的方法是将cv::...
一个时间控件 ,关于active 控件的编写。
MFC是Microsoft为Windows应用程序开发提供的一套高级工具,它封装了Windows API,使得开发者可以更
容易
地构建图形用户界面(GUI)。 “关于active控件的编写”暗示着这个时间控件可能是某种活动状态的控件,比如...
电子地图信息系统
2.
位图
背景:使用高分辨率的
位图
作为地图底图,提供清晰的视觉效果,使地图细节更加逼真,有助于增强用户对地理特征的认识。 3. 缩放功能:通过灵活的缩放选项,用户可以快速查看大范围或特定区域的详细情况,无论...
oracle
位图
索引语句,oracle之
位图
索引
位图
索引的
问题
:采用
位图
索引,一个键指向多行,可能数以百计甚至更多。如果更新一个
位图
索引键,那么这个键指向的数百条记录会与你实际更新的那一行一同被有效地锁定。
位图
索引的适用场景:
位图
索引是针对那些值不...
[数据结构]——
位图
原理及实现
位图
今天我们所介绍的数据结构叫做
位图
,在谈什么是
位图
之前我们先来看一道"非常简单的题":有40亿个无...但是,这是有
问题
的,
问题
并不在于你搜索这个数字的效率
问题
,而是你在遍历也好排序也罢,这些数字在内存...
图形处理/算法
19,473
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章