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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Symbian学习笔记(4)——在GUI应用中使用图像

發(fā)布時(shí)間:2024/4/17 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Symbian学习笔记(4)——在GUI应用中使用图像 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天學(xué)習(xí)一下如何修改GUI程序中的圖標(biāo)與如何加載圖像。

與2nd.不同的是,3rd.支持svg格式的可縮放圖標(biāo)(最大好處在于一個(gè)圖標(biāo)搞定,以前用bmp時(shí)為了應(yīng)用程序的菜單圖標(biāo)得要做四個(gè)小圖標(biāo))。而且,現(xiàn)在有了一種新的圖像打包格式mif(這名字咋跟BREW中那個(gè)MIF一樣啊)。雖然還支持以前的MBM方式但是不建議使用了。

要在應(yīng)用程序中增加圖像圖標(biāo)資源,過程如下:

第一步,先將要加入的圖像放在工程的/gfx目錄下,如:

qgn_menu_DemoUI.svg
splash2.bmp

前面一個(gè)就是應(yīng)用程序圖標(biāo)(可以修改它)。

第二步,修改/group目錄下的Icons_scalable_dc.mk文件,不知道為什么,工程向?qū)傻倪@個(gè)文件相當(dāng)不完整,郁悶。

TARGETDIR=$(ZDIR)\resource\apps
ICONTARGETFILENAME=$(TARGETDIR)\DemoUI_0xE8656D58.mif

HEADERDIR=C:\Symbian\workspace\DemoUI\inc
HEADERFILENAME=$(HEADERDIR)\DemoUI.mbg

上面的targetdir是原有的,下面的headerdir是我加上的,因?yàn)槲倚枰粋€(gè)mbg文件(以前舊方式也有這個(gè)頭文件)。

RESOURCE :???
??? mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) \
??? ??? /c32,8 $(ICONDIR)\qgn_menu_DemoUI.svg \
??? ??? /c24 $(ICONDIR)\splash2.bmp
??? ???

RELEASABLES :
??? @echo $(HEADERFILENAME)&& \
??? @echo $(ICONTARGETFILENAME)


主要是那個(gè)mifconv的參數(shù),加上/h生成mbg頭文件,注意這里的/c32,8 表示我們只提供一個(gè)svg文件但是將它的8bit圖像作為它的mask,比

原來的方式簡單多了,當(dāng)然你也可以新做一個(gè)圖像作為mask。

[補(bǔ)充@2008-03-14]

昨天這個(gè)例子只在模擬器上成功了,真機(jī)失敗,無法加載bmp圖像。
后來出編譯時(shí)的控制臺輸出發(fā)現(xiàn),它只把svg圖片放在mif文件中,而bmp圖片仍會放入一個(gè)同名的mbm文件中。所以我們還得修改pkg文件,讓mbm也打包進(jìn)sisx中:

"$(EPOCROOT)Epoc32\data\z\resource\apps\DemoUI_0xE8656D58.mif" -"!:\resource\apps\DemoUI_0xE8656D58.mif"
"$(EPOCROOT)Epoc32\data\z\resource\apps\DemoUI_0xE8656D58.mbm" -"!:\resource\apps\DemoUI_0xE8656D58.mbm"

而代碼中則無所謂了,因?yàn)锳knIconUtils::CreateIconL()會自動判斷是去mif還是mbm中讀取圖像資源。

第三步,先把上面的改完后,編譯一下,就能得到mif文件和mbg文件了。

下面在container中顯示這個(gè)圖像splash2.bmp,先修改.h文件,增加兩個(gè)CFbsBitmap。
private:

????????CFbsBitmap
*?????iBkImage;
????????CFbsBitmap
*?????iBkImageMask;
修改cpp文件,如此加載和顯示:
_LIT(KMbmFileName,"\resource\apps\DemoUI_0xE8656D58.mif");
const?TInt?KMyIconMaxWidth(100);
const?TInt?KMyIconMaxHeight(100);

...

void?CDemoUIAppView::ConstructL(?const?TRect&?aRect?)
...{

...

TFileName?fullname(KMbmFileName);
CompleteWithAppPath(fullname);
???
iBkImage
=AknIconUtils::CreateIconL(fullname,EMbmDemouiSplash);

...
}


...

void?CDemoUIAppView::Draw(?const?TRect&?aRect?)?const
...{
????CWindowGc
&?gc?=?SystemGc();
????TRect?drawRect(?Rect());
????gc.Clear(?drawRect?);
???
????gc.BitBlt(TPoint(
0,0),iBkImage);

...
}

其實(shí)這里與舊方式差不多了,但是原來的那個(gè)iBkImage->Load()方法已經(jīng)不管用了,只能用AknIconUtils提供的這個(gè)方法CreateIconL。

另外,如果是加載SVG呢,其實(shí)也一樣的,如果同時(shí)加載mask呢?也一樣。例如:
AknIconUtils::CreateIconL(iBkImage,?iBkImageMask,?fullname,?EMbmDemouiQgn_app_demoui,?EMbmDemouiQgn_menu_demoui_mask);
AknIconUtils::SetSize(iBkImage,?TSize(KMyIconMaxWidth,?KMyIconMaxHeight));
AknIconUtils::SetSize(iBkImageMask,?TSize(KMyIconMaxWidth,?KMyIconMaxHeight));

顯示時(shí)就這樣:
TPoint?point?=?TPoint(aRect.Center().iX?-?(KMyIconMaxWidth/2),aRect.Center().iY?-?(KMyIconMaxHeight/2));
gc.BitBltMasked(point,?iBkImage,?aRect,?iBkImageMask,?EFalse);


今天找了找SVG的編輯器,覺得那個(gè)RealDraw還行。

引用自:http://www.sf.org.cn/Article/lumen/200803/20904.html

轉(zhuǎn)載于:https://www.cnblogs.com/jesonray/archive/2008/10/30/1322637.html

總結(jié)

以上是生活随笔為你收集整理的Symbian学习笔记(4)——在GUI应用中使用图像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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