2012-06-16 4 views
0

Можно создать дубликат:
How to get images from URL in DelphiDelphi - Показать изображения без загрузки

Я использую Delphi 2010, с некоторыми функциями я могу загрузить и показать JPG или PNG изображений в CxImage или объект изображения в форме, но я пытаюсь обойтись без загрузки изображения на жесткий диск, мне было интересно, возможно ли это? Я искал через google & stackoverflow, но не смог найти, все образцы касаются загрузки файла.

Например, я добавил cximage1 в свою форму и хочу показать изображение с URL-адреса, например «http://www.someaddress.com/pictures/001.JPG».

Спасибо за все помогает, и извините за плохой английский :)

+0

Стандарт «Delphi» (например, Delphi 2010 или RAD Developer XE) - это одно: он поставляется с очень богатым набором библиотек и элементов управления. Библиотека ["cximage"] (http://www.xdp.it/cximage/) C++ - это нечто другое. И элемент управления DevExpress TcxImage - это еще одна вещь. Q: Что вы имеете в виду? Вопрос: Вы посмотрели документацию? – paulsm4

ответ

2

Вы можете использовать эту функцию (даенный с помощью Delphi 2010), чтобы загрузить файл через HTTP и сохранить его в TBitmap. Он прочту все типы файлов, которые имеют зарегистрированную поддержку в TGraphic hiearachy Delphi, и будет автоматически обнаруживать 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. Если нет, программа попытается автоматически обнаружить ее среди этих четырех типов. Если вы используете пользовательский графический тип, вам нужно указать его как 2-й параметр или обновить логику автоматического обнаружения, чтобы обнаружить его.

Итак, если вы хотите использовать его, чтобы отобразить загруженное изображение в TImage без сохранения его на диск, вы можете использовать его таким образом:

VAR 
    BMP : TBitMap; 

    BEGIN 
    BMP:=DownloadImage('http://domain.com/image.jpg'); 
    TRY 
     Image1.Picture.Assign(BMP) 
    FINALLY 
     BMP.Free 
    END 
    END; 
+3

Почему DownloadImage возвращает TBitmap? Почему бы не пропустить этот шаг и вернуть TGraphic IMG. Этот шаг перехода кажется совершенно бесполезным, по крайней мере, для этого вопроса. –

+0

Благодарим вас за функцию, которую я попробую, и вы узнаете как можно скорее, поэтому я пытаюсь избежать сохранения файла на диск, потому что большинство тестеров, использующих Windows 7 и, к сожалению, UAC ограничиваются записью в большинство папок, вот почему я Я пытаюсь показать фотографии из Интернета без загрузки на диск. Я также попробовал манифест UAC и файлы res, которые он работает для «Запуск от имени администратора», но почему-то я все еще не могу писать в собственную папку программы. – Sheshman

+0

спасибо за помощь, я попробовал функцию, и она отлично работает, я хотел бы еще раз поблагодарить вас за помощь. – Sheshman

Смежные вопросы