高分求解怎么修改GIF的图象大小?急啊,可再开贴给分!
我用TGifImage来修改Gif的大小
虽然能正确修改图象大小,但是有一个NewGif的对像的资源却不能正确释放(会报错),搞了好久没搞定,请问哪位高手知道原因的?怎么改?
或是谁知道还有什么别的方法修改Gif 图片大小?
下面的是我用的函数,别人写的。
function PicZoom(const SourceFile, DeskFile: WideString;
nWidth, nHeight: Integer; bDelSource: WordBool): WordBool;
var
xRat, yRat: Real;
Gif: TGifImage;
newGif: TGifImage;
Bmp: TBitmap;
i, nIndex: Integer;
Stream: TMemoryStream;
Parent:TGIFSubImage;
begin
newGif := TGifImage.Create;
Bmp := TBitmap.Create;
Gif := TGifImage.Create;
Gif.LoadFromFile(SourceFile);
xRat := nWidth / Gif.Width;
yRat := nHeight / Gif.Height;
try
try
//for i := 0 to Gif.Images.Count - 1 do
i:=0;
begin
Bmp.Assign(Gif.Images[i]);
Bmp.FreeImage;
if (Gif.Images[i].Width = 0) or (Gif.Images[i].Height = 0) then continue;
Bmp.Width := Trunc(Int(Gif.Images[i].Bitmap.Width * xRat));
Bmp.Height := Trunc(Int(Gif.Images[i].Bitmap.Height * yRat));
Bmp.Canvas.StretchDraw(Bmp.Canvas.ClipRect, Gif.Images[i].Bitmap);
newGif.Add(Bmp);
//添加GIF的扩展信息
for nIndex := 0 to Gif.Images[i].Extensions.Count - 1 do
newGif.Images[i].Extensions.Add(Gif.Images[i].Extensions.Items[nIndex]);
{//begin
Stream:=TMemoryStream.Create;
Gif.Images[i].Extensions.SaveToStream(Stream);
newGif.Images[i].Extensions.LoadFromStream(Stream,newGif.Images.SubImages[i]);
Stream.Free;
//end; }
newGif.Images[i].Left := Trunc(Int(Gif.Images[i].Left * xRat));;
newGif.Images[i].top := Trunc(Int(Gif.Images[i].Top * yRat));
end;
newGif.Compression := gcLZW;
newGif.SaveToFile(DeskFile);
if bDelSource then
DeleteFile(SourceFile);
Result := true;
finally
FreeAndNil(Gif);
FreeAndNil(Bmp);
FreeAndNil(newGif);//这一句出错
end;
end;
except
Result := false;
end;
end;
虽然能正确修改图象大小,但是有一个NewGif的对像的资源却不能正确释放(会报错),搞了好久没搞定,请问哪位高手知道原因的?怎么改?
或是谁知道还有什么别的方法修改Gif 图片大小?
下面的是我用的函数,别人写的。
function PicZoom(const SourceFile, DeskFile: WideString;
nWidth, nHeight: Integer; bDelSource: WordBool): WordBool;
var
xRat, yRat: Real;
Gif: TGifImage;
newGif: TGifImage;
Bmp: TBitmap;
i, nIndex: Integer;
Stream: TMemoryStream;
Parent:TGIFSubImage;
begin
newGif := TGifImage.Create;
Bmp := TBitmap.Create;
Gif := TGifImage.Create;
Gif.LoadFromFile(SourceFile);
xRat := nWidth / Gif.Width;
yRat := nHeight / Gif.Height;
try
try
//for i := 0 to Gif.Images.Count - 1 do
i:=0;
begin
Bmp.Assign(Gif.Images[i]);
Bmp.FreeImage;
if (Gif.Images[i].Width = 0) or (Gif.Images[i].Height = 0) then continue;
Bmp.Width := Trunc(Int(Gif.Images[i].Bitmap.Width * xRat));
Bmp.Height := Trunc(Int(Gif.Images[i].Bitmap.Height * yRat));
Bmp.Canvas.StretchDraw(Bmp.Canvas.ClipRect, Gif.Images[i].Bitmap);
newGif.Add(Bmp);
//添加GIF的扩展信息
for nIndex := 0 to Gif.Images[i].Extensions.Count - 1 do
newGif.Images[i].Extensions.Add(Gif.Images[i].Extensions.Items[nIndex]);
{//begin
Stream:=TMemoryStream.Create;
Gif.Images[i].Extensions.SaveToStream(Stream);
newGif.Images[i].Extensions.LoadFromStream(Stream,newGif.Images.SubImages[i]);
Stream.Free;
//end; }
newGif.Images[i].Left := Trunc(Int(Gif.Images[i].Left * xRat));;
newGif.Images[i].top := Trunc(Int(Gif.Images[i].Top * yRat));
end;
newGif.Compression := gcLZW;
newGif.SaveToFile(DeskFile);
if bDelSource then
DeleteFile(SourceFile);
Result := true;
finally
FreeAndNil(Gif);
FreeAndNil(Bmp);
FreeAndNil(newGif);//这一句出错
end;
end;
except
Result := false;
end;
end;
...全文
相关推荐
Ulead GIF Animator 5教程4图象的操作
Ulead GIF Animator 5教程4图象的操作
GIF图象屏幕录象软件
GIF录象软件,录制的格式是GIF图片的,很不错的软件,颜色不会失真!
图象处理,可以直接将图片传唤GIF。
图象处理,制作GIF。可以直接处理图象。
GIF文件格式解析.doc
GIF文件格式解析 比较详细 比较清晰 容易看得懂
text2gif
转换文字到Gif图象。 主要功能包括: 支持多行文本; 优化输出图象,使图象最小; 支持自动计算图象大小; 支持每行文本转换成一个图象(批量); 支持用户自定义大小,如果一幅图象不够大,自动生成系列图象; 支持各种字体,大小,左右对齐,斜体,下划线,字体颜色,背景色等; 支持透明背景; 支持图象背景; 支持上下左右边界; 支持行间距,字间距; 支持自动折行; 可以打开,修改,保存文本文件;


GAME,图形处理/多媒体

