自从有了微软的gdi+,界面的画图和交互简单了。
我们不解释gdi+了,可以百度,我们直接示范在vs2005 c++编程中使用:
第一,在stdafx.h中添加:
#include <gdiplus.h>
using namespace Gdiplus;
第二,在你的cwinapp派生类中添加:
public: GdiplusStartupInput m_GdiplusStartupInput;
ULONG_PTR m_GdiplusToken;
第三,在InitInstance()中添加:
GdiplusStartup(&m_GdiplusToken,&m_GdiplusStartupInput,NULL);
顺便:在ExitInstance()添加:
GdiplusShutdown(m_GdiplusToken);
第四,在你的cdialog派生类Onpaint()添加:(早上在vs2013刚刚新鲜出炉,在昨天下午cdib类基础上)
CPaintDC dc(this); // 用于绘制的设备上下文
if (NULL != m_dib.m_Buffer)
//if(m_dib.m_BmpLoaded==true)
{
Graphics graph(dc.m_hDC); ;
Bitmap bitmap(m_dib.Width, m_dib.Height,
m_dib.Width * 3, PixelFormat24bppRGB, m_dib.m_Buffer);
graph.DrawImage(&bitmap, 0, 0,640,480);
}
图像显示出来了,吃惊的是,头顶朝下(脑帽栽葱)!有点意思,有点小惊喜!
这是bmp数据格式存储的一大特点,也是规范吧,即数据是“z”倒序存储的。
这说明,函数SetDIBitsToDevice和函数StretchDIBits已经处理“z”倒序存储问题了。
另外,如果谁想在汇编语言下,显示这个24位(3*8)rgb真彩色640*480图像,我今天还有一些开悟,供参考,即使用vga-bios,即发挥bios中断调用功能,只不过是vga的bios,即显卡早期调用的通用标准,即视频电子标准协会(VESA)BIOS Extension,简称VBE,点到为止,至于汇编搞定camera,保留?
待续......