你好!您能告诉我如何调整 .png 图像的大小吗?或者最好给一个示例。我已经寻找答案很长时间了,似乎没有人知道如何调整 .png 图像的大小并保持其透明性。:(
PNGImage 组件的原始作者(Delphi 原生组件的基础)曾经有一个论坛,他和其他人在上面发布了使用 PNGImage 组件完成各种操作的代码片段。
在这个论坛被关闭之前,我将所有的代码片段复制并放置在 CodeGear Code Central 网站上。
其中大部分(如果不是全部)适用于本地 PNG 图像,并保持 Alpha 通道。
以下是此包含的示例的完整列表:
以下是链接:CodeCentral PNG 方法
procedure TForm1.Button1Click(Sender: TObject);
var pic_empty, pic_stamp, pic_result :TPicture;
r:TRect;
png : TPNGObject;
begin
pic_stamp := TPicture.Create;
pic_stamp.LoadFromFile('c:\heart.png');
pic_stamp.Graphic.Transparent := True;
pic_empty := TPicture.Create;
pic_empty.LoadFromFile('c:\empty.png');
pic_empty.Graphic.Transparent := True;
r.Left := 0;
r.Top := 0;
r.Right := r.Left + 100;
r.Bottom := r.Top + 100;
pic_result := tpicture.Create;
pic_result.Bitmap.Assign(pic_empty.Graphic);
pic_result.Graphic.Transparent := True;
pic_result.Bitmap.Canvas.StretchDraw(r,pic_stamp.Graphic);
pic_result.Bitmap.Width :=100;
pic_result.Bitmap.Height:=100;
png := TPNGObject.Create;
png.Assign(pic_result.Bitmap);
png.SaveToFile('c:\result.png');
png.Free;
pic_result.Free;
pic_empty.Free;
pic_stamp.free;
end;
Delphi-7, win7 x64
不幸的是,vcldeveloper在他的答案中没有给出示例。
这里有一个小例子。
var
vImage: TWICImage;
vScaler: IWICBitmapScaler;
begin
...
vImage := TWICImage.Create;
try
...
vImage.ImagingFactory.CreateBitmapScaler(vScaler);
vScaler.Initialize(vImage.Handle, NewWidth, NewHeight, WICBitmapInterpolationModeFant);
vImage.Handle := IWICBitmap(vScaler);
...
finally
vImage.Free;
end
我必须承认,我没有任何编程处理png的经验。
无论如何,你可以在这里找到一些库here。除了原生的Delphi PNG支持外,我认为你会在那里找到所有现有的库(当然是Delphi本地的)。
如果没有什么帮助,考虑尝试使用ImageMagick……这是图像处理的瑞士军刀,它可以在命令行中实现所有功能。