VC怎么显示jpg格式的图片

slhkzyl 2010-04-27 10:24:08
请问下:VC怎么显示jpg格式的图片。
jpg的图片数据是什么样的结构,像素数据怎么获取。
谢谢
...全文
1096 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
hen_hao_ji 2012-03-05
  • 打赏
  • 举报
回复
同求怎样得到Jpg像素数据?
GJ2006215078 2010-11-13
  • 打赏
  • 举报
回复
那如果是要得到jpg的像素用CImage可以吗?
liandwj 2010-05-03
  • 打赏
  • 举报
回复
强烈推荐CImage类
wxw0827 2010-05-02
  • 打赏
  • 举报
回复
怎么很多都是OpenCV的?
zhou1xp 2010-04-30
  • 打赏
  • 举报
回复
呵呵,上面的资料比较全哈,标记下
青稞 2010-04-30
  • 打赏
  • 举报
回复
CImage可加载多种格式的图片。。
image.Load("XX.jpg");
HBITMAP hBitmap = image.Detach();
处理hBitmap信息即可。。
dream17953 2010-04-30
  • 打赏
  • 举报
回复
jpg是图像压缩格式,直接分析jpg文件数据是不行的,必须有一个解压的过程,没有必要去干那个。BMP的才有价值去直接分析数据区呢。用一些控件或者是软件包吧。
slhkzyl 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 dennis19930815 的回复:]

这种无论是gif还是jpg等,都行
[/Quote]
那对图片的处理呢?比如说阈值处理
dennis19930815 2010-04-30
  • 打赏
  • 举报
回复
这种无论是gif还是jpg等,都行
slhkzyl 2010-04-30
  • 打赏
  • 举报
回复
Ls的说的是显示图片的代码吗?
dennis19930815 2010-04-30
  • 打赏
  • 举报
回复
#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage( "F:\\001\\1.gif" );
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage( "Example1", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}
dennis19930815 2010-04-30
  • 打赏
  • 举报
回复
可以用OpenCV,如下:
[#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage( "F:\\001\\1.gif" );
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage( "Example1", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}][/code]
dennis19930815 2010-04-30
  • 打赏
  • 举报
回复
可以用OpenCV,如下:

#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* img = cvLoadImage( "F:\\001\\1.gif" );
cvNamedWindow( "Example1", CV_WINDOW_AUTOSIZE );
cvShowImage( "Example1", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow( "Example1" );
return 0;
}
slhkzyl 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 visualeleven 的回复:]

GDI+ CImage类是可以的
[/Quote]
不懂哦,我显示方面是通过IPicture来做的,我用的是vc6.0,没CIMAGE这类
slhkzyl 2010-04-30
  • 打赏
  • 举报
回复
有人以前做过这方面的例子没?
就是对黑白的jpg图片做个简单的阈值处理,大于某个给定阈值T设为0,小于T为255,
现在关键一个问题是不知道怎么取得像素值,所以不知道怎么处理
Eleven 2010-04-30
  • 打赏
  • 举报
回复
GDI+ CImage类是可以的
slhkzyl 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dream17953 的回复:]

jpg是图像压缩格式,直接分析jpg文件数据是不行的,必须有一个解压的过程,没有必要去干那个。BMP的才有价值去直接分析数据区呢。用一些控件或者是软件包吧。
[/Quote]

能不能告诉我怎么使用呢?没接触过呢
slhkzyl 2010-04-29
  • 打赏
  • 举报
回复
LS的各位朋友,给出来的都是显示图片的例子
对于像素数据的获取貌似没给出哦1
tanwei1002 2010-04-27
  • 打赏
  • 举报
回复
1、通过点击浏览按钮选择JPG图像文件
点击浏览按钮打开文件对话框选择JPG图像文件,得到文件所在的路径目录。
关键代码如下:
char szFilter[] = "JPG Files (*.jpg)|*.jpg|JPEG Files (*.jpeg)|*.jpeg|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,"jpg|jpeg|gif",NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() == IDOK)
{
CString strPathName = dlg.GetPathName();
}

2、加载JPG文件到内存
主要通过COM类—IPicture实现。
关键代码如下:
BOOL CShowJPGDlg::LoadJPGFile(const char *pPathname)
{
CFile file;
if( !file.Open( pPathname, CFile::modeRead) )
return FALSE;

DWORD m_nFileLen;
m_nFileLen = file.GetLength();

HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, m_nFileLen );
LPVOID lpBuf = ::GlobalLock( hMem );
if( file.ReadHuge( lpBuf, m_nFileLen ) != m_nFileLen )
return FALSE;
file.Close();

::GlobalUnlock( hMem );

if ( CreateStreamOnHGlobal( hMem, TRUE, &pStream ) !=S_OK )
return FALSE;

if ( OleLoadPicture( pStream, m_nFileLen, TRUE, IID_IPicture, ( LPVOID * )&pPicture ) !=S_OK )
return FALSE;

return TRUE;
}

3、在屏幕上显示JPG图像
主要通过Render函数实现显示JPG图像。
Render函数说明
HRESULT Render( HDC hdc, //设备环境句柄
long x, //在hdc上的水平坐标
long y, //在hdc上的垂直坐标
long cx, //图像宽度
long cy, //图像高度
OLE_XPOS_HIMETRIC xSrc, //在源图像上的水平偏移
OLE_YPOS_HIMETRIC ySrc, //在源图像上的垂直偏移
OLE_XSIZE_HIMETRIC cxSrc, //在源图像上水平拷贝的数量
OLE_YSIZE_HIMETRIC cySrc, //在源图像上垂直拷贝的数量
LPCRECT prcWBounds //指向目标图元设备环境句柄的指针
);
关键代码如下:
void CShowJPGDlg::DrawImage(int x, int y, CDC *pDC)
{
if (pPicture != NULL)
{
long nWidth,nHeight;
pPicture->get_Width( &nWidth );
pPicture->get_Height( &nHeight );
/*
//图片原大显示
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz );
pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,0,nHeight,nWidth,-nHeight,NULL);
*/
//按窗口尺寸显示
CRect rect;
GetClientRect(&rect);
pPicture->Render(pDC->m_hDC,x,y,rect.Width(),rect.Height(),0,nHeight,nWidth,-nHeight,NULL);
}
}
m_tornado 2010-04-27
  • 打赏
  • 举报
回复
jpg应该是压缩过的文件吧,如果用CImage打开的话,就已经展开过了,也就是按照行列的RGB值排列的
加载更多回复(5)

19,469

社区成员

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

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