那就先做個顯示圖像的程序試試

老師讓做的第一個關於顯示圖像的程序。

什麼格式的圖像可以顯示?

有多少種方法?

每種方法的應用場合以及優劣?

從外部文件夾顯示和內部資源顯示?

顯示出圖像的大小是原圖大小還是可適應大小?

顯示圖像函數的內部原理?

以上是我能想到的這一個星期內要解決的問題。

事實上我遇到的第一個問題是什麼是真彩色啊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程序設計》

 

 

 

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