2014-02-19 3 views
1

웹에서 이미지를 저장하지 않고 (저장하지 않고) TImage에 표시하고 싶습니다. 메시지와 함께웹에서 이미지를 가져 와서 시냅스를 사용하여 표시

response := TMemoryStream.Create; 
try 
    HttpGetBinary('http://www.example-url/example_image.jpg', response); 
    Image.Picture.LoadFromStream(response); 
finally 
    response.Free; 
end; 

프로젝트 ------- 발생한 예외 클래스 'EReadError': 다음 코드는 오류가 발생 스트림이 냅 라이브러리에있는 함수 오류

을 읽을합니다 (에 picture.inc) 것과 오류 지점 :

function TPicFileFormatsList.FindByStreamFormat(Stream: TStream): TGraphicClass; 
var 
    I: Integer; 
begin 
    for I := Count - 1 downto 0 do 
    begin 
    Result := GetFormats(I)^.GraphicClass; 
    if Result.IsStreamFormatSupported(Stream) then // <<<<<< this is the error line 
     Exit; 
    end; 
    Result := nil; 
end; 
+0

이미지를로드하기 전에 시작 위치를 시작 부분으로 설정하십시오. 'response.Position : = 0;처럼. Image.Picture.LoadFromStream ...' – TLama

+0

나는 여기에 게시하기 전에 그것을 시도했다. 결과는 같습니다. – user3327194

답변

1

당신은 JPEG 그래픽 클래스가 등록 가도록 (듯이), 프로젝트에 어딘가에 JPEGLib 장치를 포함해야합니다.

uses 
    JPEGLib, // to support JPEG 
    PNGcomn, // to support PNG 
    httpsend; 

response := TMemoryStream.Create; 
try 
    if HttpGetBinary('http://www.example-url/example_image.jpg', response) then 
    begin 
    response.Seek(0, soFromBeginning); 
    Image.Picture.LoadFromStream(response); 
    end; 
finally 
    response.Free; 
end; 
+1

필자는 FPC를 직접 가지고 있지는 않지만'TImage.Picture'에'LoadFromStream' 메서드가 있으면 스트림에서 직접로드 할 수있는 기회가 있어야한다고 생각합니다. 'TPicFileFormatsList.FindByStreamFormat' 메소드가 실패했기 때문에, JPEG 포맷을 등록하는 누락 된 유닛에서 (스트림 위치 재설정을 제외하고) 문제가되지 않을 수 있습니까? 그것은 단지 야생 추측입니다 ... – TLama

+1

+1 @traama 당신은 완전히 맞습니다 ... FPC는 델파이와 그 점이 다릅니다 : o) –

+0

이것은 작동합니다. JPEGLib 및 PNGcomn은 필요하지 않으며 디버거는 내 장치에서 사용되지 않는다는 메시지를 제공합니다. 필자는 Delphi가 아니라 FPC를 사용한다고 언급해야합니다. :) 고맙습니다. – user3327194

관련 문제