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

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

wang11个月前 (10-12)121

本文共计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” 的相关文章

十二星座的属相婚配表男生,十二生肖配对十二星座配对?十二星座配对明星

十二星座的属相婚配表男生,十二生肖配对十二星座配对?十二星座配对明星

本文共计5595个文字,预计阅读时间需要18分30秒,由作者编辑整理创作于2023年08月10日 03点40分22秒。十二星座的属相婚配表男生,十二生肖配对十二星座配对? 提起十二星座的属相婚配表男生,大家都知道,有人问十二生肖配对十二星座配对?另外,还有人想问十二星座配对表,你知道这是怎么回事?...

谁有十二星座拟人动漫男生和女生的

谁有十二星座拟人动漫男生和女生的

本文共计4948个文字,预计阅读时间需要16分20秒,由作者编辑整理创作于2023年08月10日 20点41分42秒。谁有十二星座拟人动漫男生和女生的 给枣亏滚个采纳吧凳余,嘻嘻空昌这是什么十二星座的动漫或者是漫画吗? 听说挺有名的 这似曾相识的画风23333333确实有一个漫画  有妖气连载的“...

十二星座男生的表白指南(十二星座哪个男生最容易表白)

十二星座男生的表白指南(十二星座哪个男生最容易表白)

本文共计4026个文字,预计阅读时间需要13分16秒,由作者编辑整理创作于2023年08月11日 17点33分05秒。十二星座男生的表白指南   毕业季,表白季,在毕业即将到来的时候,暗恋很久的男生终于会趁着聚餐,写纪念册等等时机,表白自己心动已久的恋情。下面我们来给大家看一下十二星座男生的表白指...

黑龙江省长秘书叫什么(现在黑龙江省的省长是谁?)

本文共计7466个文字,预计阅读时间需要24分44秒,由作者编辑整理创作于2023年08月12日 11点03分50秒。黑龙江省长秘书叫什么 现任山东省省长的秘书叫什么名字 是姜大明。 1953年3月生,男,汉族,黑龙江生产建设兵团战士、班长、副排长、团政治处新闻报道员; 1975年4月至, 现在黑龙...

新任浙江省纪委书记(2016年浙江省纪委书记是谁)

新任浙江省纪委书记(2016年浙江省纪委书记是谁)

本文共计1876个文字,预计阅读时间需要6分6秒,由作者编辑整理创作于2023年08月12日 11点42分31秒。新任浙江省纪委书记请问在王华元之后,浙江省新任纪委书记是谁?还没呢```估计还的等段时间``2016年浙江省纪委书记是谁2016年浙江省纪委书记是谁我要向纪委书记反应问题... 201...

山东十大滑雪场排名?山东最好的滑雪场是哪家山东滑雪场排名?

本文共计2249个文字,预计阅读时间需要7分21秒,由作者编辑整理创作于2023年08月12日 13点07分23秒。山东十大滑雪场排名?我来回答你的问题,根据山东旅游协会公布的数据显示。山东十大滑雪场排名第一的是青岛的天泰滑雪场,占地五十六亩。排名第二的是艾山滑雪场。山东最好的滑雪场是哪家山东滑雪场...