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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

要在應用程序中增加圖像圖標資源,過程如下:

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

qgn_menu_DemoUI.svg
splash2.bmp

前面一個就是應用程序圖標(可以修改它)。

第二步,修改/group目錄下的Icons_scalable_dc.mk文件,不知道為什么,工程向導生成的這個文件相當不完整,郁悶。

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

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

上面的targetdir是原有的,下面的headerdir是我加上的,因為我需要一個mbg文件(以前舊方式也有這個頭文件)。

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

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


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

原來的方式簡單多了,當然你也可以新做一個圖像作為mask。

[補充@2008-03-14]

昨天這個例子只在模擬器上成功了,真機失敗,無法加載bmp圖像。
后來出編譯時的控制臺輸出發現,它只把svg圖片放在mif文件中,而bmp圖片仍會放入一個同名的mbm文件中。所以我們還得修改pkg文件,讓mbm也打包進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"

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

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

下面在container中顯示這個圖像splash2.bmp,先修改.h文件,增加兩個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);

...
}

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

另外,如果是加載SVG呢,其實也一樣的,如果同時加載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));

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


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

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

轉載于:https://www.cnblogs.com/jesonray/archive/2008/10/30/1322637.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。