MFC中BMP图像读取显示求助

fdesheng 2011-11-21 10:34:06
第一种方法是从网上下的CDib类读取显示,结果问题如下:图片随静态文本框的大小显示效果不一样,而且不好(如图1.2)。
第二种方法是用matcom实现,结果显示正常,但是图像在静态文本框中显示太小,而且有坐标(如图3)。


...全文
817 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdesheng 2011-11-23
  • 打赏
  • 举报
回复
谢谢各位,现在用CImage类实现了读取显示图像,但是问题又来了,图像处理后只有图像矩阵,不知道该怎么显示出来,各位帮帮忙,最好具体点,谢谢。如果能QQ指导就更好了,QQ1050289814
fdesheng 2011-11-21
  • 打赏
  • 举报
回复
第一个的主要代码:CFileDialog fileDialog(TRUE, "*.BMP", NULL, NULL,"位图文件(*.BMP)|*.bmp;*.BMP|");
if(IDOK==fileDialog.DoModal())
{
CDib dib;
if(dib.Load(fileDialog.GetPathName()))
{

CRect rect;
CWnd *pwnd=GetDlgItem(IDC_BMP);
pwnd->GetClientRect(&rect);
CDC *pdc=pwnd->GetDC();
dib.SetPalette(pdc);
dib.Draw(pdc,rect.TopLeft().x,rect.TopLeft().y,rect.Width(),rect.Height());
}
}
第二个的主要代码: static char BASED_CODE szFilter[]=
"BMP格式文件(*.bmp)|*.bmp|所有格式的文件(*.*)|*.*||";
CFileDialog dlg(1,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,this);
if(dlg.DoModal()==IDOK)
{
CString filename=dlg.GetPathName();
m_h=winaxes(this->m_hWnd);
char *file;
file=filename.GetBuffer(filename.GetLength());
filename.ReleaseBuffer();
Mm mFileName=TM(file);
imread(mFileName,TM("*.bmp"),i_o,m_data,m_map);
int *pdims=m_data.getdims();
int ndims=m_data.getndims();
int nrow=m_data.rows();
int ncol=m_data.cols();
m_data=im2double(m_data);

m_wnd_pic1=(CWnd *)GetDlgItem(IDC_PIC1);
m_axis_pic1=winaxes(m_wnd_pic1->m_hWnd);
CRect rect_pic1;
m_wnd_pic1->GetClientRect(rect_pic1);
axes(CL(m_axis_pic1));
axesposition(rect_pic1.TopLeft().x,rect_pic1.TopLeft().y,
rect_pic1.Width(),rect_pic1.Height());

//set(m_h,TM("Cdata"),m_data);
colormap(gray());
set(m_axis_pic1,(CL(TM("Color")),TM("white")));
imagesc(CL(m_data));
greatliudy123 2011-11-21
  • 打赏
  • 举报
回复
View类中的显示函数 不知道 是不是你想要的

CDSplitDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc ->statedoc&&state2==1)
{
BYTE* pBitmapData = CDibNew1->GetData();
LPBITMAPINFO pBitmapInfo = CDibNew1->GetInfo();
int bitmapHeight = CDibNew1->GetHeight();
int bitmapWidth = CDibNew1->GetWidth();
if (CDibNew1->GetRGB()) // Has a color table
{
CPalette * hPalette=CreateBitmapPalette(CDibNew1);
CPalette * hOldPalette =
pDC->SelectPalette(hPalette, true);
pDC->RealizePalette();
::StretchDIBits(pDC->GetSafeHdc(),0, 0, bitmapWidth, bitmapHeight,
0, 0, bitmapWidth, bitmapHeight,
pBitmapData, pBitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
pDC->SelectPalette(hOldPalette, true);
::DeleteObject(hPalette);
}
else
{
StretchDIBits(pDC->GetSafeHdc(),
0, 0, bitmapWidth, bitmapHeight,
0, 0, bitmapWidth, bitmapHeight,
pBitmapData, pBitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
}
fdesheng 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengbingchun 的回复:]
试试利用CxImage来显示图像,很方便
[/Quote]用CDib不能很好的显示图像吗??我的程序中只是显示图像,其他对图像的操作不是通过c语言实现的,O(∩_∩)O谢谢
fengbingchun 2011-11-21
  • 打赏
  • 举报
回复
试试利用CxImage来显示图像,很方便

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧