4

MemoryStream を直接 Picture に割り当てることができないのはなぜですか? 以下に、MemoryStream を TImage に割り当てる 2 つの方法を掲載します。Method1 は機能せず、Method2 は機能します。なんで?ありがとうサム

Method1 : このメソッドは JPEG エラー #42 を返します

Var
  ms1 : TMemoryStream;
  J : TJPEGImage;
  St : String;
begin
    ms1 := TMemoryStream.Create;
    try
      try
        St := 'somepath';
        IdFTP1.Get(St, ms1);
        if ms1.Size > 0 then
        Begin
          J := TJPEGImage.Create;
          try
            J.LoadFromStream(ms1);
            Image4.Picture := nil;
            Image4.Picture.Assign(J);  // here, I got an error #42 JPEG
          finally
            J.Free;
          end;
        End;
      except
        on e:exception do ShowMessage(e.message);
      end;
    finally
      ms1.Free;
    End;
  End;
end;

Method2 : このメソッドは動作します

Var
  ms1, ms2 : TMemoryStream;
  J : TJPEGImage;
  St : String;
begin
    ms1 := TMemoryStream.Create;
    ms2 := TMemoryStream.Create;
    try
      try
        IdFTP1.Get(somepath, ms1);
        if ms1.Size > 0 then
        Begin
          J := TJPEGImage.Create;
          try
            J.LoadFromStream(ms1);
            ms1.SaveToFile('lixofoto.jpg');
            ms2.LoadFromFile('lixofoto.jpg');
            J.LoadFromStream(ms2);
            ImgProd.Picture.Assign(J);
            DeleteFile('lixofoto.jpg');
          finally
            J.Free;
          end;
        End;
      except

      end;
    finally
      ms1.Free;
      ms2.Free;
    End;
4

1 に答える 1