那就先做个显示图像的程序试试

老师让做的第一个关于显示图像的程序。

什么格式的图像可以显示?

有多少种方法?

每种方法的应用场合以及优劣?

从外部文件夹显示和内部资源显示?

显示出图像的大小是原图大小还是可适应大小?

显示图像函数的内部原理?

以上是我能想到的这一个星期内要解决的问题。

事实上我遇到的第一个问题是什么是真彩色啊256色啊128色啊。。。。。。

A1:一幅真彩色图片,每一个像素都是用RGB三个字节表示的,每个字节有8位(适应计算机)表示RGB的256种亮度,所以这就是常说的24位真彩色,就特别真,涵盖了全部的色彩16777216种,即真彩色图像也叫16777216色图像喽。世界上的颜色远不止这些,可是计算机最多的颜色也就这些,这也远超过人类视觉能辨别的颜色了。看得出来这样的真彩色图像实在是太大了。所以一般所用的16色图像啊,256色图像啊都用到调色板的概念,很好的压缩了。

A2:平时老是做的BMP文件格式,图片的格式多种多样,这里也没必要掌握吧,但是得搞清楚MFC中只有BMP格式的文件能显示和处理吗?为什么?

bmp格式的现在有很多种,有些MFC是识别不了的。这就尴尬了。

A3:显示图像的方法。

方法一:利用picture控件,无论是静态还是动态吧,都是一个意思。这种方法得在资源中有BITMAP资源,所以也只能显示bitmap类型的图,picture控件本身成为了一个图片。动态只是动态加载了控件

方法二:从资源中装入GDI位图,或者是从磁盘中加载位图,(其本质还是从DIB加载或是读取过后来创建了GDI位图)具体的显示函数就是BitBlt函数和StretchBlt函数的应用

void CShowPicture2View::OnPicturethree() 
{
	// TODO: Add your command handler code here

	//从资源中装入DDB位图
	CDC * pDC = GetDC();                             //获取当前窗口的类对象指针
	CBitmap bitmap;                                  //CBitmap对象;
	CDC dc;                                          //CDC对象

	bitmap.LoadBitmap(IDB_BITMAP2);                  //装载资源
	dc.CreateCompatibleDC(pDC);                      //创建内存设备环境
	dc.SelectObject(&bitmap);                        //将位图选入到设备环境中
	pDC->BitBlt(0,0,699,600,&dc,0,0,SRCCOPY);        //将内存设备复制到真正的设备环境中	

}

方法三:

位图是用来看的,Windows在视讯显示器上或打印页面上支持显示DIB的两个函数。这两个函数称为SetDIBitsToDevice和StretchDIBits 。使用这两个函数必须得很好的读取位图文件(详见博客的读取与写入篇)每个函数都使用储存在内存中的DIB并能显示整个DIB或它的矩形部分。当使用SetDIBitsToDevice时,以图素为单位所显示映像的大小与DIB的图素大小相同。例如,一个640×480的DIB会占据整个标准的VGA屏幕,但在300dpi的激光打印机上它只有约2.1×1.6英寸。StretchDIBits能延伸和缩小DIB尺寸的行和列从而在输出设备上显示一个特定的大小。参考《Windows程序设计》

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章