Вы можете использовать GDI+
:
uses ..., ActiveX, GDIPAPI, GDIPOBJ, GDIPUTIL;
function LoadImageFromFile(const FileName: string; Bmp: TBitmap): Boolean;
var
GPImage: TGPImage;
encoderClsid: TGUID;
MemStream: TMemoryStream;
begin
Result := False;
GPImage := TGPImage.Create(FileName);
try
if GPImage.GetLastStatus = Ok then
begin
MemStream := TMemoryStream.Create;
try
GetEncoderClsid('image/bmp', encoderClsid);
if GPImage.Save(TStreamAdapter.Create(MemStream), encoderClsid) = Ok then
begin
MemStream.Position := 0;
Bmp.LoadFromStream(MemStream);
Result := True;
end;
finally
MemStream.Free;
end;
end;
finally
GPImage.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadImageFromFile('D:\ML_10222.tif', Image1.Picture.Bitmap);
end;
Я также хочу упомянуть Synopse TSynPicture
(GDI + обертка): https://stackoverflow.com/a/6251810/937125
РЕДАКТИРОВАТЬ: GDI + TGPImage
также поддерживает несколько кадров / страниц TIFF:
Чтобы получить количество кадров, используйте:
GPImage.GetFrameCount(GDIPAPI.FrameDimensionPage);
Для установки активного кадра используйте:
GPImage.SelectActiveFrame(GDIPAPI.FrameDimensionPage, Index);
Обратите внимание, что TSynPicture
также поддерживает несколько кадров.