1. MFC程序里如何插入圖片
這個說起來有點麻煩,因為不知道你具體要實現的功能,如果只是想讓你的程序背景貼上一張圖片的話.樓下那位已經給出你辦法了,他的這個是將程序的背景擦除時直接不擦除的這個消息響應函數里把擦除背景的操作改為貼圖操作.
導入外部圖片,就點項目菜單下的添加資源,然後點導入,右下角那裡選擇文件類型,找到你要導入的bmp圖片,點確定.圖片就導入了,然後在資源管理器下面的bitmap項目組里可以找到該圖片.和對應的ID號.
不過我還是幫你解釋一下樓下的方法,省的你只知其然不知所以然.
//該函數用於在程序的背景須要擦除時windows標准消息ON_ERASEBKGND調用
BOOL CXXView::OnEraseBkgnd(CDC* pDC)
{
CBitmap bitmap;//這里先建立一個點陣圖對象
bitmap.LoadBitmap(IDB_BKGROUND); //這里使用根本圖像在資源中的ID載入圖像到對象中
BITMAP bmp;//這里建立一個點陣圖結構體主要是用來取點陣圖的長寬值的
bitmap.GetBitmap(&bmp);//這里就是將點陣圖對象中的圖像資料放進這個結構體中
CDC dcCom;//建立標准DC用於繪制點陣圖
dcCom.CreateCompatibleDC(pDC);//將建立的dc與當前程序提供的dc兼容,這里提供的dc是在ON_PAINT消息響應的OnPaint函數里創建的CPaintdc,至於這個Cpaintdc會作些什麼自己查一下吧,不然會寫很長
dcCom.SelectObject(&bitmap);//這里將圖片放進這個兼容dc里,兼容dc在創建的時候大小是1X1像素的模塊,將圖像對象選進DC後,DC模塊大小變為該圖片大小.
CRect rect;//創建一個矩形對象
GetClientRect(&rect);//得到當前窗口的矩形大小,放進矩形對象中
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCom,0,0, bmp.bmWidth,bmp.bmHeight,SRCCOPY);//使用DC的成員函數stretchblt將兼容DC拷備到當前dc中.
return true;
}
其實辦法有很多種,依情況不同而使用也不同.比如dc.BitBlt()也是可以起到和StretchBlt差不多的作用,但是他不會將圖片壓縮和拉伸.
另外在ON_WM_CTLCOLOR()消息響應的OnCtlColor函數中也可以實現背景貼圖的功能,這個辦法比較簡單相對來說,你只要為程序窗口類添加WM_CTLCOLOR()消息,然後在相應自動生成的OnCtlColor函數里,建立一個CBrush畫刷,再建立一個CBitmap對象,將圖像選進Cbitmap完了,將畫刷初始化為這個Cbtimap,最後將這個畫刷在OnCtlColor函數中返回.就可以了
2. C語言如何在編寫的程序中插入圖片
試試基於C/C++語言的開源圖像處理函數庫OpenCV吧:
#include "cv.h"
#include "highgui.h"
int main( int argc, char** argv )
{
IplImage* pImg; //聲明IplImage指針
//載入圖像
if( argc == 2 &&
(pImg = cvLoadImage( argv[1], 1)) != 0 )
{
cvNamedWindow( "Image", 1 );//創建窗口
cvShowImage( "Image", pImg );//顯示圖像
cvWaitKey(0); //等待按鍵
cvDestroyWindow( "Image" );//銷毀窗口
cvReleaseImage( &pImg ); //釋放圖像
return 0;
}