日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一种在MFC程序上显示jpeg图片的方法(一)宁滥勿缺

發(fā)布時(shí)間:2023/12/13 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 一种在MFC程序上显示jpeg图片的方法(一)宁滥勿缺 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鳴謝:https://blog.csdn.net/guo_lei_lamant/article/details/79484818?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

感謝上面的博主,讓我知道了除了臭大街的CBitmap居然還有CImage

同時(shí)鳴謝:https://www.cnblogs.com/DOMLX/p/9598974.html,這位博主讓我學(xué)習(xí)了設(shè)備上下文如何準(zhǔn)確的獲取窗口上任意坐標(biāo)位置上的一片矩形區(qū)域,并把圖片流畫上去,這位一看就是高手,估計(jì)是寫軍事間諜衛(wèi)星圖片處理軟件的,開個(gè)玩笑

 學(xué)了visual C++驀然發(fā)現(xiàn),原來根本不放在眼里的“windows拖控件編程”背后是怎樣一種令人震驚的復(fù)雜:就連鼠標(biāo)定位,圖片的加載也成了一項(xiàng)登月工程!,寫下這篇文章的目的源自一個(gè)偉大的想法:我想在MFC對(duì)話框上插入一張美麗的jpeg圖片,讓編程和程序界面更富有詩意。結(jié)果卻是:主流編程書籍,這個(gè)寶典,那個(gè)入門到精通都閉口不談實(shí)現(xiàn)方式。更讓人哭笑不得的是,他們卻不厭其煩的談?wù)撛诎粹o上加載bmp圖片。我想他們一定有把飯菜盛在枕頭上吃的雅好,要不怎么能想出這么驚悚的主意呢。

縱觀現(xiàn)在主流vc書籍,用vs2010及以后的書也就占了3-4成,而這也是這幾年來最好的情況了。MFC編程一開始,給人一種要把windows API進(jìn)行到底的感覺,然而不久你會(huì)發(fā)現(xiàn),為了開發(fā)效率----大家都慫了,MFC還是允許自定義對(duì)話框的嘛,那還不如直接windows form算了。但是為了體現(xiàn)MFC的偉大之處,還是應(yīng)該弄的難一點(diǎn),比如picture control控件休想加載jpeg便是一例。窮其篇幅,還是得感謝上帝提供了IPicture這樣一個(gè)圖像接口,配合IStream在堆區(qū)中開辟一片空間,把圖片文件生成流的形式渲染到窗口設(shè)備上去。

你以為這就萬事大吉了?不挖坑怎么能體現(xiàn)windows的深邃呢,于是大多數(shù)書籍,都裝孫子般的教你把整張圖片渲染到整個(gè)MFC窗口客戶區(qū)去-----這再次暴露了他們喜歡把內(nèi)褲邊提到外套胸口處的愛好,當(dāng)然了,你想把圖片渲染到窗口的某個(gè)坐標(biāo)位置上的矩形區(qū)域也不是不可以,那就先聲明個(gè)CRect的區(qū)域吧,然后獲取對(duì)話框上顯示圖片的控件picture control 的·ID IDC_STATIC通過GetDlgItem函數(shù)把控件區(qū)域?qū)?yīng)到CRect類的指針(這里的類指針更像是個(gè)傳出參數(shù),這個(gè)函數(shù)把picture control的坐標(biāo)賦值給了CRect類指針)

GetDlgItem(IDC_STATIC)->GetDC()的作用是生成一個(gè)畫布,其作用類似聲明一個(gè)CDC類的指針pdc然后把得到的圖片渲染到畫布pdc->m_hDC,后面的4個(gè)參數(shù)依次是相對(duì)于對(duì)話框左邊,頂端的距離
以及目標(biāo)區(qū)域的寬高
    CImage image;
    image.Load(_T("E:\b82e84b7g.jpg"));

    //獲取圖片客戶區(qū)位置
    CRect zcRect; 
    GetDlgItem(IDC_STATIC)->GetClientRect(&zcRect); 
   
// 將圖像顯示在界面之上 
    image.Draw(GetDlgItem(IDC_STATIC)->GetDC()->m_hDC, 
                            zcRect.left, 
                            zcRect.top, 
                            zcRect.Width(), 
                            zcRect.Height());
    }

上述代碼的優(yōu)點(diǎn)在于,可以快速(代碼量少)且體面的為我們?cè)趯?duì)話框上插一個(gè)圖。不足之處在于,盡管你加載的是jpeg圖片,但生成的是一個(gè)bmp圖片,失真嚴(yán)重,但畢竟在

設(shè)備上下文區(qū)域獲取的方法方面為我們提供了寶貴的參考,而且很容易的實(shí)現(xiàn)了圖片以適應(yīng)的模式顯示在控件中。

效果:

但起碼還算是實(shí)現(xiàn)了在指定位置顯示

且看下回分解:你今天在申請(qǐng)的堆空間中,為加載的IPicture生成IStream了嗎

總結(jié)

以上是生活随笔為你收集整理的一种在MFC程序上显示jpeg图片的方法(一)宁滥勿缺的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。