全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1886
推到 Plurk!
推到 Facebook!

如何安裝 GraphicEx 後,使用 Image 讀 MemoryStream ?

尚未結案
sokoyo
一般會員


發表:3
回覆:4
積分:1
註冊:2004-12-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-21 00:07:45 IP:140.138.xxx.xxx 未訂閱
我想從網路上讀取圖片到 Imgae 上 因為想支援 gif jpeg bmp png 的檔案 所以安裝 GraphicEx 這個 component 已知以下程式碼能完成我要的功能 TMemoryStream *ms = new TMemoryStream(); IdHTTP->Get("http://www.google.com.tw/images/hp0.gif", ms); ms->Position=0; ms->SaveToFile("C:\\t.gif"); Image->Picture->LoadFromFile("C:\\t.gif"); delete ms; 但我希望不要另外產生檔案 所以請問該如何從 MemoryStream 直接 load 到 Image 上 ? 或者有其他更好的方法能從網路上讀取任何格式的圖片到 Image 上 ? 謝謝 <(_ _)>
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-21 00:20:30 IP:218.168.xxx.xxx 未訂閱
您好: 試試
Image1->Picture->Bitmap->LoadFromStream(ms);
順心
sokoyo
一般會員


發表:3
回覆:4
積分:1
註冊:2004-12-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-21 00:35:16 IP:140.138.xxx.xxx 未訂閱
謝謝您的幫忙 我試了以後出現 Error Bitmap image is not valid. 無法成功 load 另外還發現 GraphicEx 似乎是依據檔案的副檔名來使用適合的 object 這樣如果副檔名錯誤 就無法把圖正確顯示在 Image 上了 請問是否有更好的方法能讀取多種格式的圖片呢 ? 發表人 - sokoyo 於 2005/07/21 00:36:00
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-21 19:59:57 IP:59.115.xxx.xxx 未訂閱
sokoyo 您好:    要直接由 MemoryStream 直接 load 到 Image 的作法請參考下列範例:
TMemoryStream *ms = new TMemoryStream();
IdHTTP1->Get("http://www.google.com.tw/images/hp0.gif", ms);
ms->Position=0;    TGIFGraphic *GIF = new TGIFGraphic;
GIF->LoadFromStream(ms);
Image1->Picture->Bitmap->Assign(GIF);    delete GIF;
delete ms;
另外有關以 GraphicEx 讀取多種格式圖片的問題,則可參考下列作法:
if(OpenPictureDialog1->Execute()){
    AnsiString fName = OpenPictureDialog1->FileName;
    AnsiString curExt = LowerCase(ExtractFileExt(fName));
    Image1->Picture->Bitmap = NULL;        if(curExt == ".png"){
        TPNGGraphic *Png = new TPNGGraphic();
        Png->LoadFromFile(fName);            Image1->Picture->Bitmap->Assign(Png);            delete Png;
        Png = NULL;
    }else if(curExt == ".gif"){
        TGIFGraphic *Gif = new TGIFGraphic();
        Gif->LoadFromFile(fName);            Image1->Picture->Bitmap->Assign(Gif);            delete Gif;
        Gif = NULL;
    }else{
        Image1->Picture->Bitmap->LoadFromFile(fName);
    }
}
7 天天敲鍵盤 v 時時按滑鼠 8
sokoyo
一般會員


發表:3
回覆:4
積分:1
註冊:2004-12-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-21 22:54:16 IP:140.138.xxx.xxx 未訂閱
RedSnow 您好    依照您的方法 我的問題解決了 <(_ _)>    謝謝您 
系統時間:2024-05-13 15:41:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!