HI!你能告诉我如何调整.png图像的大小。或者更好地举个例子。我一直在寻找答案,似乎没有人知道如何调整.png图像的大小并保持其透明度。 :(
答案 0 :(得分:22)
PNGImage组件的原始作者(Delphi本机组件的基础)有一个论坛,他和其他人发布了关于如何使用PNGImage组件执行操作的代码片段。
在论坛被删除之前,我抓住了所有代码片段的副本,并将它们放在CodeGear Code Central网站上。
大多数(如果不是全部)都可以使用本机PNG图像并保持Alpha通道。
以下是包中包含的完整示例列表:
以下是链接:CodeCentral PNG Methods
答案 1 :(得分:2)
您可以在Delphi 2010中使用Windows Imaging Component(WIC)。您可以在TWICImage类中加载PNG图像,然后从其句柄中提取IWICBitmapScaler接口。
使用IWICBitmapScaler,您可以缩小或缩小图像。
WIC适用于Windows Vista和Windows 7.对于Windows XP,您必须在使用之前安装更新。
答案 2 :(得分:1)
有PngImage版本(便携式网络图形Delphi) 这允许通过简单的StretchDraw来实现。
我有允许这样做的版本 - 1。1564(2006年7月31日)
不允许的版本 - 1。4361(2003年3月8日)
为了执行它,我使用了:
heart.png - 具有透明度,我设法调整大小并保存透明度。
empty.png - 纯透明的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
答案 3 :(得分:1)
不幸的是, vcldeveloper 在他的answer中没有给出示例。
这是一个小例子。
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
在Delphi源代码中可以找到更多示例。
答案 4 :(得分:-1)
我必须承认我没有任何以编程方式玩png的经验 无论如何,你会发现一些lib here。除了原生的Delphi PNG支持外,我想你会发现所有现有的库(当然是delphi本身)。
如果没有什么可以帮助你,请考虑尽可能使用ImageMagick ...这是图像处理的瑞士军刀,它所能做的一切在命令行中是可行的