我使用德爾福2010年,有一些功能,我可以在CxImage的下載和顯示JPG或PNG圖片或圖像對象的形式,但我試圖做到沒有下載圖片到硬盤驅動器,我想知道是可能的嗎?我通過谷歌搜索& stackoverflow,但無法找到,所有示例都是關於下載文件。
例如,我在表單中添加了一個cximage1,並希望顯示來自像「http://www.someaddress.com/pictures/001.JPG」這樣的網址的圖片。
感謝所有幫助和抱歉不好英語:)
我使用德爾福2010年,有一些功能,我可以在CxImage的下載和顯示JPG或PNG圖片或圖像對象的形式,但我試圖做到沒有下載圖片到硬盤驅動器,我想知道是可能的嗎?我通過谷歌搜索& stackoverflow,但無法找到,所有示例都是關於下載文件。
例如,我在表單中添加了一個cximage1,並希望顯示來自像「http://www.someaddress.com/pictures/001.JPG」這樣的網址的圖片。
感謝所有幫助和抱歉不好英語:)
您可以使用此功能(編譯和使用德爾福2010測試),以通過HTTP下載一個文件,並將其存儲在TBitMap。它會讀取已註冊的支持德爾福的TGraphic hiearachy所有文件類型,並會自動檢測BMP,GIF,JPG和PNG文件格式:
USES Graphics, IdHTTP, PngImage, jpeg, GIFImg;
FUNCTION DownloadImage(CONST URL : STRING ; ImageType : TGraphicClass = NIL) : TBitMap;
VAR
HTTP : TIdHttp;
S : TStream;
IMG : TGraphic;
STR : AnsiString;
BEGIN
HTTP:=TIdHttp.Create(NIL);
TRY
S:=TMemoryStream.Create;
TRY
HTTP.Get(URL,S);
IF NOT Assigned(ImageType) THEN BEGIN
S.Position:=0;
SetLength(STR,5);
S.Read(STR[1],LENGTH(STR));
IF COPY(STR,1,2)='BM' THEN
ImageType:=TBitMap
ELSE IF COPY(STR,1,3)='GIF' THEN
ImageType:=TGIFImage
ELSE IF COPY(STR,2,3)='PNG' THEN
ImageType:=TPngImage
ELSE IF (ORD(STR[1])=$FF) AND (ORD(STR[2])=$D8) THEN
ImageType:=TJPEGImage
END;
IF NOT Assigned(ImageType) THEN RAISE EInvalidImage.Create('Unrecognized file format!');
IMG:=ImageType.Create;
TRY
S.Position:=0;
IMG.LoadFromStream(S);
Result:=TBitMap.Create;
TRY
Result.Assign(IMG)
EXCEPT
Result.Free;
RAISE
END
FINALLY
IMG.Free
END
FINALLY
S.Free
END
FINALLY
HTTP.Free
END
END;
如果你已經知道的文件類型,你可以指定它作爲TGifImage,TPngImage,TJPegImage或TBitMap的第二個參數。如果沒有,例程會嘗試在這四種類型中自動檢測它。如果您使用自定義圖形類型,則需要將其指定爲第二個參數或更新自動檢測邏輯以檢測它。
所以,如果你想用它來顯示一個TImage中下載的圖像,而不將其保存到光盤,可以這樣使用它:
VAR
BMP : TBitMap;
BEGIN
BMP:=DownloadImage('http://domain.com/image.jpg');
TRY
Image1.Picture.Assign(BMP)
FINALLY
BMP.Free
END
END;
爲什麼DownloadImage返回TBitmap?爲什麼不跳過這一步並返回TGraphic IMG。至少對於這個問題來說,這個轉換步驟似乎相當不必要。 –
謝謝你的功能,我會嘗試,並會盡快讓你知道,所以我試圖避免保存文件光盤,因爲大多數測試人員使用Windows 7和不幸的UAC限制寫入大多數文件夾,這就是爲什麼我試圖在沒有下載到光盤的情況下顯示互聯網上的圖片。我也嘗試了UAC清單和res文件它的工作爲「以管理員身份運行」,但不知何故,我仍然無法寫入程序自己的文件夾。 – Sheshman
感謝所有幫助,我試了一下功能,它的功能完美,我想再次感謝您的幫助。 – Sheshman
標準「德爾福」(例如德爾福2010,或RAD開發XE)是一回事 - 它帶有一套非常豐富的庫和控件。 [「cximage」](http://www.xdp.it/cximage/)C++庫有些不同。 DevExpress TcxImage控件還是第三件事。問:你指的是什麼?問:你看過文件嗎? – paulsm4