当前位置:首页 > 互联网百科 > 正文内容

如何将bmp图像数据还原为图片并在listcontrol中显示- mfc

wang2年前 (2023-10-12)197

本文共计4022个文字,预计阅读时间需要13分15秒,由作者编辑整理创作于2023年10月10日 04点37分44秒。

如何将bmp图像数据还原为图片并在listcontrol中显示? mfc

问题描述如下:从串口接收的bmp图像数据保存在rgbBuffer[]数组,通过下面代码实现了图像的还原和显示,下图中央的大图:

BITMAPINFOHEADER bmiHeader;
bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth = 240; // 位图宽度(像素);
bmiHeader.biHeight = 320; // 位图高度(像素);
bmiHeader.biPlanes = 1;
bmiHeader.biBitCount = 24;
bmiHeader.biCompression = BI_RGB; // 没有压缩;BI_RGB
bmiHeader.biSizeImage = 153600;
bmiHeader.biXPelsPerMeter = 0;
bmiHeader.biYPelsPerMeter = 0;
bmiHeader.biClrUsed = 0;
bmiHeader.biClrImportant = 0;

// now blast it to the CDC passed in.
// lines returns the number of lines actually displayed
//pDC->SetStretchBltMode(STRETCH_HALFTONE); //COLORONCOLOR
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC-> m_hDC, //pDC-> m_hDC, 色彩格式转化 pDC->GetSafeHdc()
170,
bmiHeader.biHeight+50,
bmiHeader.biWidth,//目标图像宽度
0-bmiHeader.biHeight, //目标图像高度
0,
0,
bmiHeader.biWidth*2, //源图像宽度 用来放大和缩小原始图像
bmiHeader.biHeight*2, //源图像高度
rgbBuffer, //imageBuffer,图像数据 //DIB数据缓存区指针(BYTE * 类型)
//buffer,
(LPBITMAPINFO)&bmiHeader,
DIB_RGB_COLORS,
SRCCOPY);
请问在此基础上,我该怎么实现将该图片加入到listcontrol中显示,更好有代码。最终效果如下,在左下角的listcontrol中显示该图片的缩略图:
我尝试下面的代码,可只能显示图片的一部分,就还差一步
BITMAP BitMap;
BitMap.bmType=0;
BitMap.bmHeight=320;
BitMap.bmWidth=240;
BitMap.bmWidthBytes=240*4;//大于或等于bmWidth*bmBitsPixel/8所得的值
BitMap.bmPlanes=1;
BitMap.bmBitsPixel=32;
BitMap.bmBits=rgbData;
CBitmap cbitMap;
cbitMap.CreateBitmapIndirect(&BitMap);

//imageList.Add(&cbitMap);
imageList.Add(&cbitMap,RGB(0,0, 0));
//imageList.Add(&cbitMap,RGB(255,255, 255)); //增加非选中状态图像

CString strTemp;
for (int n = 0; n < 1; n++) {
strTemp.Format(_T("pic:%d"),n);
m_ListCtrl.InsertItem(n,strTemp, n);
}
//imageList.Draw(pDC, 0, CPoint(0,0),NULL);
imageList.Detach();

效果如图:

请高手帮忙啊
如何将bmp图像数据还原为图片并在listcontrol中显示? mfc
如何将bmp图像数据还原为图片并在listcontrol中显示? mfc
在列表控件中显示的图像都是图标,所以你要获取每一个位图的略缩图标,这样你就可以把他显示在列表控件中。如何在列表控件中显示图标,网上有很多资料;至于如何获取位图略缩图标,网上也有很多这样的例子。

DrawDibDraw和StretchDIBits和SetDIBitsToDevice哪个效率高

我感觉效率由高到低应该是
SetDIBitsToDevice DrawDibDraw StretchDIBits
相信我不会错的。

下面分享相关内容的知识扩展:

VC图像处理 向下扫描算法,StretchDIBits()函数目标矩形的左上角逻辑坐标与原位图左上角坐标为什么不同?

for(int j=0;j{
::StretchDIBits(pDC->GetSafeHdc(),0, j, bitmapWidth, 1,
0, bitmapHeight-j, bitmapWidth, 1,
pBitmapData, pBitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
Sleep(5);
}

位图的原点是从左下角开始的

怎样用VC++实现对24位bmp图像的打开和显示(bmp图片假定放在D盘picture文件夹内),以备后续的图像处理?

希望高手给出具体的源代码,我找了很多,不过都有错误。我是新手,不太会调试。也希望能给个VC++的调试类问题的网站。不甚感激!
是在VS2008中 ,好像调试了下 有很多错误也
24位位图在VC++中需要三个结构来存储:
BITMAPFILEHEADER:文件信息头
LPBITMAPINFOHEADER:位图信息头指针
LPBYTE:像素数据指针

假设你的图片名为:“图片.bmp”。

1、你用VC++建立一个MFC(exe)工程,命名为“My”,在弹出的“MFC应用程序向导-步骤1”中选“单文档”,然后点“完成”->“确定”。

2、在“MyView.h”文件中找到代码“CMyDoc* GetDocument();”在其下方添加如下代码:
BITMAPINFOHEADER bmih;
LPBYTE pBits;
BOOL Read(char* s);

3、然后打开“MyView.cpp”文件,在最下面写如下代码:
BOOL CMyView::Read(char* s)
{
CFile file;
BITMAPFILEHEADER bmfh;

//打开文件
if(!file.Open(s,CFile::modeRead))
{
AfxMessageBox("File cannot open!");
return FALSE;
}

//读文件信息头
file.Read( (LPVOID)&bmfh, sizeof(bmfh) );
if(bmfh.bfType != 0x4d42)
{
AfxMessageBox("This is not a bmp file!");
return FALSE;
}

//读位图信息头
int infoSize = bmfh.bfOffBits - sizeof(bmfh);
bmih = (LPBITMAPINFOHEADER)new BYTE[infoSize];
file.Read( (LPVOID)bmih, infoSize);
if(bmih->biBitCount!=24)
{
AfxMessageBox("The number of colors is not valid!");
return FALSE;
}

//读图像数据
pBits = new BYTE[bmih->biSizeImage];
file.Read( (LPVOID)pBits, bmih->biSizeImage);

return TRUE;
}

4、往上找,找到构造函数:CMyView::CMyView()
在其中添加代码:
Read("d:\\picture\\图片.bmp");

5、往下找,找到OnDraw函数,在该函数的第三行添加代码:
if(bmih && pBits)
{
::StretchDIBits(pDC->GetSafeHdc(),0,0,bmih->biWidth,bmih->biHeight,0,0,bmih->biWidth,bmih->biHeight,pBits,(LPBITMAPINFO)bmih,DIB_RGB_COLORS,SRCCOPY);
}

运行即可。我已试过,可以打开并显示。希望你一步一步照做,代码不要写错!

http://wenku.baidu.com/view/550a8fd049649b6648d7478a.html
http://wenku.baidu.com/view/fe8ff04ffe4733687e21aa95.html

VB picturebox控件家在一个图片的时候,怎么让他全部显示出来

就是我用picture控件家在一个图片,因为图片很大,只显示出一部分,怎么才能让他全部显示出来?我是想用哪个图片做屏保用的,谢谢!具体怎么弄
autosize已经设置为true,就是因为这个
用PaintPicture *** :
PaintPicture p,0,0,Picture1.ScaleWidth,Picture1.ScaleHeight
其中p为LoadPicture *** 的返回值
能说清楚一点吗?怎么用
事实上建议使用 Image 控件。
Image 控件因为不能使用 hDC 和 hWnd 操作,占用内存少,重绘快。里面有一个 Stretch 属性,设置为 True 就是图片将就 Image,False 就是 Image 将就图片(估计也是用 PaintPicture 函数画的……参数不同而已)。
注意!设置为 False,Image 自动调整完毕后再进行大小修改是可以的,不会限定大小!
如果没有特殊需求(如 GDI+),就用 Image 好一点,甚至是 Form(支持 PictureBox 的所有 *** )。
我估计 PaintPicture 的原型是 StretchDIBits。

下面讲解我从不知道有 PaintPicture 这个函数到掌握其用法的过程,供大家参考:
1、见到 PaintPicture 函数,考虑是否为 VB 的标准库函数;
2、直接调用,说明是;
3、用对象浏览器查找,发现所有具有 hDC 的控件都支持 PaintPicture,在根据 jcButton 的 DrawGradientEx 函数(by Charles PV)推测其原型。
4、由于 PaintPicture 的之一个参数类型为 StdPicture,结合 LoadPicture 的返回值及自动转换(IPictureDisp->StdPicture)想到用法。以下为简略型。

PaintPicture LoadPicture("{图片名称}", ...一堆参数,根据名称想作用), 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, ...又是一堆参数

这个没有设置返回值接收,想要也很简单,用个变量接着,再向 PaintPicture 后和最后添加两个半角括号即可。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文链接:http://www.370seo.com/5270.html

“如何将bmp图像数据还原为图片并在listcontrol中显示- mfc” 的相关文章

水瓶座的男生适合哪些星座的女生?

水瓶座的男生适合哪些星座的女生?

本文共计2404个文字,预计阅读时间需要7分51秒,由作者编辑整理创作于2023年08月09日 03点08分28秒。水瓶座的男生适合哪些星座的女生? 水瓶座男生最适合哪些星座的女生,这一点我们可以从水瓶座男生的性格来一探究竟。水瓶座的男生需要比较丰富的精神生活,但同时他们也比较容易犹豫不决,他们是新...

求十二星座男生动漫图片(十二星座哪个星座男生最好)

求十二星座男生动漫图片(十二星座哪个星座男生最好)

本文共计6214个文字,预计阅读时间需要20分33秒,由作者编辑整理创作于2023年08月09日 04点18分49秒。求十二星座男生动漫图片 1、白羊座2、金牛座3、双子座4、巨蟹座5、狮子座6、处女座7、魔蝎座8、射手座9、双鱼座10、水瓶座11、天秤座12、天蝎座 十二星座哪个星座男生最好 要是...

与12星座男生约会的禁忌?揭穿12星座男生的谎言

与12星座男生约会的禁忌?揭穿12星座男生的谎言

本文共计7006个文字,预计阅读时间需要23分12秒,由作者编辑整理创作于2023年08月09日 05点21分36秒。与12星座男生约会的禁忌? 终于可以与自己心仪的男生约会啦,心里是不是很窃喜呢。但是,女生们要注意啦,每个男生都有自己的喜欢和憎恶,如果你不小心踩到他的避雷区,那么你第一次的甜蜜约会...

最善于隐藏好色本质的星座男生(哪些星座善于隐藏自身缺点)

最善于隐藏好色本质的星座男生(哪些星座善于隐藏自身缺点)

本文共计3359个文字,预计阅读时间需要11分3秒,由作者编辑整理创作于2023年08月09日 10点58分31秒。最善于隐藏好色本质的星座男生 中国人自古思想都比较保守,特别是针对性这方面。自古来说,好色是男人的天性。有的人常常以黄段子的形式来表达,而有些人埋藏在心里没有表达出来,这样的人属于闷骚...

男生是什么星座最好(6月份是什么星座男生)

男生是什么星座最好(6月份是什么星座男生)

本文共计13231个文字,预计阅读时间需要43分57秒,由作者编辑整理创作于2023年08月10日 01点56分10秒。男生是什么星座最好1、巨蟹男:风度偏偏,痴情形象深植人心。巨蟹座是十二星座当中,难得符合专情、真心、温柔有善解人意的好男人。说起巨蟹男的好,只要曾经跟巨蟹座交往过的都知道,他们全身...

十二星座中哪个星座的男生最会聊天?

十二星座中哪个星座的男生最会聊天?

本文共计3820个文字,预计阅读时间需要12分35秒,由作者编辑整理创作于2023年08月10日 16点33分30秒。十二星座中哪个星座的男生最会聊天?容易把天聊死的星座代表有金牛座,那哪个星座的男生在约会时最会聊天?... 容易把天聊死的星座代表有金牛座,那哪个星座的男生在约会时最会聊天?...