获得jpg的rgb后,如何显示图形? 我是想知道是否就是简单的用setpix写点来实现? 如果是,这个实现过程中是否存在酸法问题,也就是速度快慢问题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用SetPixcel()显然效率太低,显示位图通常是用这样一组函数:BitBlt,StretchBlt,StretchDIBits。参数中要求有一个BITMAPINFOHEADER,你要根据图像的实际大小来设置。这里有个读取位图并显示的例子,可以参考:http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=82&show=0 dc.BitBlt(r.left,r.top,bitSize.bmWidth,bitSize.bmHeight,&memdc,0,0,SRCCOPY); 你是说将解出的数据,组织成BYTE bits[] ,然后创建HBITMAP,再进行BitBlt显示? 我现在可以用setpixel显示了 如果是24位的图像//初始化信息头 memset(&bmih,0,sizeof(bmih)); bmih.biSize=sizeof(bmih); bmih.biHeight=m_LastPos.y-m_FirstPos.y; bmih.biWidth=m_LastPos.x-m_FirstPos.x; bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight; bmih.biBitCount=24; bmih.biPlanes=1; bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(pDC->m_hDC, 0,0, m_bmih.biWidth,m_bmih.biHeight, 0,0, 0,m_bmih.biHeight, m_pImgData, (BITMAPINFO*)&m_bmih, DIB_RGB_COLORS); sorry!还没改好呢,不小心就回复了,下面的代码才是正确的BITMAPINFOHEADER bmih;int height=XXX;int width=XXX;BYTE* pImgData=XXX;//你只需要修改上面的三个变量即可int ZeroWidth=(((width*24) + 31) / 32 * 4)-width*3;memset(&bmih,0,sizeof(bmih)); bmih.biSize=sizeof(bmih); bmih.biHeight=height; // bmih.biWidth=width; // bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight; bmih.biBitCount=24; bmih.biPlanes=1; bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(m_memDC->m_hDC, 0,0, m_bmih.biWidth,m_bmih.biHeight, 0,0, 0,m_bmih.biHeight, pImgData, (BITMAPINFO*)&m_bmih, DIB_RGB_COLORS);当然上面的代码只能对24位图操作,如是其它的图,需要作相应的变动 CMFCToolBar设置图像 想学习图像处理 请问如何判断一个文本框中输入的字符都是数字 这都是些什么问题,请大家看看 双升游戏出牌规则的算法有谁做过吗? CDBVariant是什么类型 请问我要查找“#”这个符号怎么办。 mfc 数据库编程疑问? 为什么CPrintDialog.GetDefaults()以后,使用DoModal()不显示对话框 坛上的高手看过来,本人已经气的七窍生烟了!!! 关于调试工具 boundscheck 的问题~? 请教!关于打印的问题。看看这个代码有什么问题?
BitBlt,StretchBlt,StretchDIBits。
参数中要求有一个BITMAPINFOHEADER,你要根据图像的实际大小来设置。
这里有个读取位图并显示的例子,可以参考:
http://www.yangning.com/cgi-bin/topic.cgi?forum=1&topic=82&show=0
我现在可以用setpixel显示了
//初始化信息头
memset(&bmih,0,sizeof(bmih));
bmih.biSize=sizeof(bmih);
bmih.biHeight=m_LastPos.y-m_FirstPos.y;
bmih.biWidth=m_LastPos.x-m_FirstPos.x;
bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight;
bmih.biBitCount=24;
bmih.biPlanes=1;
bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(pDC->m_hDC,
0,0, m_bmih.biWidth,m_bmih.biHeight,
0,0,
0,m_bmih.biHeight,
m_pImgData,
(BITMAPINFO*)&m_bmih,
DIB_RGB_COLORS);
还没改好呢,不小心就回复了,下面的代码才是正确的
BITMAPINFOHEADER bmih;
int height=XXX;
int width=XXX;
BYTE* pImgData=XXX;//你只需要修改上面的三个变量即可
int ZeroWidth=(((width*24) + 31) / 32 * 4)-width*3;
memset(&bmih,0,sizeof(bmih));
bmih.biSize=sizeof(bmih);
bmih.biHeight=height; //
bmih.biWidth=width; //
bmih.biSizeImage=height*width*3+ZeroWidth*bmih.biHeight;
bmih.biBitCount=24;
bmih.biPlanes=1;
bmih.biXPelsPerMeter=3780;SetDIBitsToDevice(m_memDC->m_hDC,
0,0,
m_bmih.biWidth,m_bmih.biHeight,
0,0,
0,m_bmih.biHeight,
pImgData,
(BITMAPINFO*)&m_bmih,
DIB_RGB_COLORS);当然上面的代码只能对24位图操作,如是其它的图,需要作相应的变动