青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調做技術__歡迎移步我的獨立博客 codemaro.com 微博 kevinlynx

GDI+中從內存讀取圖片/保存圖片到內存

要給項目中增加一個新的模塊,需要先在服務器端做一些圖片處理相關的工作。本來,對圖片

做一些諸如ALPHA混合旋轉縮放的操作,在游戲客戶端應該是很容易的事。但是這事要在服務

器做,就不得不引入一些第三方庫。反正我們的服務器運行于WINDOWS下,這里又需要處理

JPG圖片的加載,我就考慮到了GDI+。

 

在這之前對GDI+沒有過任何接觸。直接翻了MSDN,還好居然有個一系列的usage。GDI+的Image

本身支持JPG的直接載入。但是并沒有我理想中的CreateFromMemory( const void *buf )接口。

看起來唯一可以從內存創(chuàng)建Gdiplus::Image對象的方法是從一個叫IStream*的COM東西。我揣摩

微軟為什么沒有提供我理想中的那個接口,或者說要把GDI+設計成這樣,可能還是考慮到對多語

言的支持。于是問題轉換為如何將一個C語言的const void*轉換為IStream*。我甚至在開始的時候

感覺到是不是要自己實現(xiàn)個Stream。后來在google上找到了一個似乎是標準的方法:首先創(chuàng)建個

HGLOBAL對象,然后通過GlobalLock就可以將一個C的const void*直接memcpy到這個HGLOBAL

里,最后,通過CreateStreamOnHGlobal這樣的接口就可以得到一個IStream。

 

惡心的是,基于之前對服務器內存使用的優(yōu)化,我現(xiàn)在對于內存的使用非常敏感(誰說現(xiàn)在內存

大了就可以任意malloc了??)。上面那個過程對于資源的管理在MSDN文檔中似乎顯得有點

模糊。CreateStreamOnHGlobal函數(shù)的第二個參數(shù)指定當IStream->Release的時候,是否會自動

刪除這個HGLOBAL對象。我雖然對COM不懂,但也知道它的對象是基于一種引用計數(shù)的管理方式。

逐字看了下文檔,發(fā)現(xiàn)一個final單詞,原來是IStream->Release最后一次釋放時,會同時釋放掉

這個HGLOBAL對象。更讓人發(fā)指的是,我猜測Image( IStream * )來創(chuàng)建Image時,Image又

會對這個IStream進行一次AddRef。我發(fā)覺MSDN對于Gdiplus::Image::FromStream函數(shù)的說明

也有點模糊。我揣摩使用FromStream獲得的Image*,是否需要手動去delete?這個地方的內存

資源管理,一定得搞個水落石出。結果是,F(xiàn)romStream的實現(xiàn)就是簡單地new了個Image。而

Image內部肯定會對IStream進行AddRef,并且,如果在Image銷毀前銷毀這個HGLOBAL,這個

Image基本也就廢了。

 

也就是說,Image本身不對HGLOBAL中的圖片數(shù)據(jù)進行復制。囧。別想讓我再寫個wrap class把

HGLOBAL和Image糾結在一起,簡單考慮,將CreateStreamOnHGlobal第二個參數(shù)設為TRUE。

 

要將一個Image保存為一段內存,也比較麻煩。我的方法和google上的相同。當然,微軟的庫依

然讓我在很多細節(jié)上栽跟斗(如前所說,可能這是基于多語言支持的考慮)。首先需要創(chuàng)建個空

的IStream,即CreateStreamOnHGlobal第一個參數(shù)為NULL。然后將Image Save到這個IStream。

再根據(jù)該IStream::Seek獲取其大小,自己再分配段內存,最后IStream::Read讀取進來。同樣,

需要注意相關內存資源的管理。

 

下午簡單把以上兩個過程簡單封裝了下。

下載代碼。

posted on 2009-05-28 20:23 Kevin Lynx 閱讀(13265) 評論(4)  編輯 收藏 引用 所屬分類: 通用編程

評論

# re: GDI+中從內存讀取圖片/保存圖片到內存 2009-05-28 23:10 expter

呵呵,牛啊!

還是頂下,你QQ好多,ZM!
我加你。。。
  回復  更多評論   

# re: GDI+中從內存讀取圖片/保存圖片到內存 2009-06-01 10:13 zwp

可以采用freeimage來從內存解編碼圖像數(shù)據(jù)的。
此外,IStream提供給用戶更多選擇,你可以直接從網(wǎng)絡讀取圖像數(shù)據(jù)創(chuàng)建image,甚至在將保存出來的圖片保存到網(wǎng)絡上去。只要自己簡單實現(xiàn)下該接口即可。而這樣的靈活性不是簡單的一個void*可以實現(xiàn)的:)
不過微軟既然提供了從文件名打開和保存的方法,作為經常出現(xiàn)的內存打開和保存需求似乎也應該提供相關的方法。
  回復  更多評論   

# re: GDI+中從內存讀取圖片/保存圖片到內存 2009-06-19 15:08 mike7734@sina.com

大哥,有完整DEMO么,我完全不懂GDI
發(fā)一份給我看看行么,我只會C,不會C++
mike7734@sina.com  回復  更多評論   

# re: GDI+中從內存讀取圖片/保存圖片到內存 2009-06-20 10:58 Kevin Lynx

@mike7734@sina.com
你最好找人發(fā)一份c++ primer給你。:)  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久.com| 亚洲人成网站在线播| 午夜在线一区二区| 国产精品一区免费视频| 亚洲在线播放| 亚洲欧美日韩国产| 狠狠色噜噜狠狠狠狠色吗综合| 在线免费高清一区二区三区| 欧美成人精品一区二区| 欧美第一黄网免费网站| 亚洲私人影院| 午夜天堂精品久久久久| 在线成人激情黄色| 亚洲免费观看在线观看| 国产日本欧美在线观看| 欧美大片免费观看| 国产精品扒开腿爽爽爽视频| 久久久亚洲精品一区二区三区 | 蜜臀va亚洲va欧美va天堂| 久久久噜噜噜久噜久久| 99re6这里只有精品| 亚洲午夜久久久| 韩国三级在线一区| 亚洲日本中文字幕| 国产亚洲激情| 亚洲激情国产| 国产香蕉久久精品综合网| 免费亚洲电影在线观看| 欧美色大人视频| 久久久久久综合| 欧美日韩免费观看一区二区三区| 欧美一区二区三区精品| 欧美福利一区| 久久久亚洲人| 欧美日韩一区二区精品| 久久综合色婷婷| 欧美日韩国产va另类| 久久亚洲视频| 国产精品美女久久久久久免费| 久久综合成人精品亚洲另类欧美 | 欧美一二三视频| 亚洲人体一区| 欧美怡红院视频一区二区三区| 日韩亚洲欧美中文三级| 久久久久久9| 久久精品视频在线观看| 欧美日韩国产在线观看| 免费久久精品视频| 国产精品网站视频| 99精品欧美一区二区三区| 亚洲国产1区| 欧美在线啊v| 欧美中文在线视频| 国产精品久久97| 亚洲乱码国产乱码精品精| 亚洲日本免费电影| 久久久精品欧美丰满| 久久精品人人| 国产日韩精品视频一区| 亚洲午夜视频在线| 亚洲一区二区三区久久| 欧美日本高清| 亚洲理伦在线| 亚洲视频精品| 欧美午夜无遮挡| 一本大道久久a久久精品综合| 日韩一二三在线视频播| 欧美成人伊人久久综合网| 欧美高清免费| 亚洲精品国产精品乱码不99按摩| 久久青草久久| 暖暖成人免费视频| 亚洲欧洲一区二区三区久久| 欧美成人国产一区二区| 亚洲电影免费在线| 日韩一级网站| 国产精品久久777777毛茸茸| 亚洲综合首页| 久久婷婷色综合| 亚洲第一区色| 欧美精品一区二区在线观看| 亚洲三级视频| 午夜精品久久久久久久99热浪潮| 国产精品高精视频免费| 先锋a资源在线看亚洲| 久久嫩草精品久久久精品一 | 女主播福利一区| 亚洲欧洲视频在线| 亚洲欧美日韩综合| 国内外成人免费激情在线视频网站| 久久av一区二区三区| 欧美激情按摩| 午夜国产精品影院在线观看 | 亚洲日本无吗高清不卡| 国产精品久久久久一区二区三区共| 亚洲靠逼com| 亚洲欧美日韩国产成人| 国产日韩欧美视频| 久久亚洲不卡| 99国产精品视频免费观看一公开| 亚洲综合日本| 精品88久久久久88久久久| 男女视频一区二区| 亚洲桃色在线一区| 麻豆精品在线观看| 亚洲在线视频免费观看| 在线观看成人av| 国产精品高精视频免费| 久热成人在线视频| 亚洲深夜福利在线| 欧美激情精品久久久| 欧美一区三区三区高中清蜜桃| 亚洲高清在线观看| 国产日韩一区欧美| 欧美日韩国产成人| 久久久久久久久久久久久9999| 日韩视频精品在线| 免费成人av在线看| 午夜在线a亚洲v天堂网2018| 亚洲精品国产精品国自产观看| 国产深夜精品| 国产精品成人一区二区| 欧美二区在线看| 久久免费视频在线| 性做久久久久久久免费看| 日韩一二三在线视频播| 亚洲电影自拍| 美日韩精品免费| 久久久久亚洲综合| 午夜精品视频在线观看| 宅男精品视频| 日韩视频一区二区| 在线观看国产精品淫| 国产在线欧美| 国产精品一香蕉国产线看观看 | 亚洲欧美日韩人成在线播放| 亚洲人妖在线| 欧美激情视频给我| 欧美成人高清视频| 欧美国产国产综合| 免播放器亚洲一区| 欧美不卡视频| 你懂的一区二区| 免费在线观看成人av| 麻豆9191精品国产| 看欧美日韩国产| 欧美v国产在线一区二区三区| 久久精品国产99国产精品| 欧美在线高清视频| 久久久精品一区二区三区| 久久久久久久精| 麻豆亚洲精品| 亚洲丶国产丶欧美一区二区三区| 欧美丰满高潮xxxx喷水动漫| 欧美成人在线免费观看| 亚洲国产日韩欧美一区二区三区| 亚洲黄色尤物视频| 一区二区日韩免费看| 中文在线资源观看网站视频免费不卡 | 永久域名在线精品| 一区免费观看视频| 亚洲大胆视频| 亚洲最新在线视频| 亚洲欧美成人精品| 久久精品日产第一区二区三区| 久久久久久久久久久久久久一区 | 亚洲激情欧美| 亚洲最新在线| 亚洲欧美视频在线观看| 欧美一区影院| 亚洲第一精品电影| 日韩特黄影片| 欧美一区二区高清在线观看| 久久久久久有精品国产| 欧美精品一区三区在线观看| 国产精品久久午夜夜伦鲁鲁| 黄色另类av| 这里只有精品在线播放| 欧美在线免费观看| 亚洲国产成人精品女人久久久| 中日韩午夜理伦电影免费| 新狼窝色av性久久久久久| 欧美+亚洲+精品+三区| 国产精品国产三级国产普通话蜜臀| 国产欧美一区二区精品仙草咪| 亚洲国产裸拍裸体视频在线观看乱了中文| 99国产精品久久久久久久久久| 欧美一区二区三区啪啪| 亚洲电影在线| 欧美专区第一页| 欧美无砖砖区免费| 亚洲成人自拍视频| 性久久久久久久久久久久| 欧美黄色一区| 亚洲国产日日夜夜| 在线观看不卡| 亚洲在线观看视频| 久久国内精品视频| 亚洲网站在线观看| 亚洲电影网站|