Slazem se da su GrapihcEx odlicne komponente, ali ja bih predlozio GDI+ iz razloga zato sto je to veoma thin layer, a poseduje dosta mogucnosti. Pascal GDI+ API se moze naci ovde
http://www.progdigy.com/files/gdiplus.zip
Posto je zahtevana konverzija iz gif formata u tiff, predpostavljam da se zeli sacuvati svaki frame gif slike u tiff multiframe, inace
je kod konverzije dosta jednostavniji :)
Code:
...
uses ... GDIPAPI, GDIPOBJ, GDIPUTIL;
..
procedure Gif2Tiff(GifImgPath, TiffImgPath: String);
var Img, TiffImg: TGPImage;
encoderClsid: TGUID;
encoderParameters: TEncoderParameters;
encoderVal: TEncoderValue;
status: TStatus;
frameCount: Integer;
dimensionId: TGUID;
I: Integer;
begin
//
Img := TGPImage.Create(GifImgPath);
try
if GetEncoderClsid('image/tiff', encoderClsid) < 0 then
begin
ShowMessage('tiff encoder nije instaliran!');
Exit;
end;
TiffImg := TGPImage.Create(GifImgPath);
Img.GetFrameDimensionsList(@dimensionId,1);
frameCount := Img.GetFrameCount(dimensionId);
encoderParameters.Count := 1;
encoderParameters.Parameter[0].Guid := EncoderSaveFlag;
encoderParameters.Parameter[0].Type_ := EncoderParameterValueTypeLong;
encoderParameters.Parameter[0].NumberOfValues := 1;
encoderVal := EncoderValueMultiFrame;
encoderParameters.Parameter[0].Value := @encoderVal;
status := TiffImg.Save(TiffImgPath,encoderClsid, @encoderParameters);
if status <> GDIPAPI.Ok then
ShowMessage( Format('Greska: %s',[GetStatus(status)]) )
else
begin
//od 1 zato sto je prvi frame vec save-ovan
for I := 1 to frameCount - 1 do
begin
encoderVal := EncoderValueFrameDimensionPage;
status := Img.SelectActiveFrame(dimensionId,I);
if status <> GDIPAPI.Ok then
begin
ShowMessage( Format('Greska: %s',[GetStatus(status)]) );
Exit;
end;
status := TiffImg.SaveAdd(Img, @encoderParameters);
if status <> GDIPAPI.Ok then
begin
ShowMessage( Format('Greska: %s',[GetStatus(status)]) );
Exit;
end;
end;
encoderVal := EncoderValueFlush;
TiffImg.SaveAdd(@encoderParameters);
if status <> GDIPAPI.Ok then
begin
ShowMessage( Format('Greska: %s',[GetStatus(status)]) );
Exit;
end;
ShowMessage('Konverzija ooook ! :)');
end;
finally
FreeAndNil(Img);
FreeAndNil(TiffImg);
end;
end;
[Ovu poruku je menjao nikomak dana 29.06.2008. u 16:40 GMT+1]