R
rwlin
Unregistered / Unconfirmed
GUEST, unregistred user!
关于TPngObject 进行png图片缩放的问题;
发现用PngImagge来显示png是没有问题,但是做png图片缩放是不行的,网络上我能找到的最新的版本是1.564,虽然作者添加了resize 的功能,但是有bug,也就是一个png图像resize并不会按照比例进行缩放,而是从坐标0,0开始截取,这显然不是我们想要的;
我采用了bitmap 进行中转,如
procedure PNGFileToBitmap(const Source, Dest: String);
var
Bitmap: TBitmap;
PNG: TPNGObject;
begin
PNG := TPNGObject.Create;
Bitmap := TBitmap.Create;
{In case something goes wrong, free booth PNG and Bitmap}
try
PNG.LoadFromFile(Source);
Bitmap.Assign(PNG); //Convert data into bitmap
Bitmap.SaveToFile(Dest);
finally
PNG.Free;
Bitmap.Free;
end
end;
然后将bitmap进行resize,再将缩放后的bitmap转回png ,从而达到png缩放的目的,结果出来了,但是png特有的alpha通道转没了。。所以看上去半透效果就没了,有时候甚至还有锯齿;
但是我们用ps或者iw进行png缩放的效果很好啊,而且保留了原来的alpha通道;
研究了半天,没研究出来,各位有什么好建议??这不是一个简单的问题哦。[]
发现用PngImagge来显示png是没有问题,但是做png图片缩放是不行的,网络上我能找到的最新的版本是1.564,虽然作者添加了resize 的功能,但是有bug,也就是一个png图像resize并不会按照比例进行缩放,而是从坐标0,0开始截取,这显然不是我们想要的;
我采用了bitmap 进行中转,如
procedure PNGFileToBitmap(const Source, Dest: String);
var
Bitmap: TBitmap;
PNG: TPNGObject;
begin
PNG := TPNGObject.Create;
Bitmap := TBitmap.Create;
{In case something goes wrong, free booth PNG and Bitmap}
try
PNG.LoadFromFile(Source);
Bitmap.Assign(PNG); //Convert data into bitmap
Bitmap.SaveToFile(Dest);
finally
PNG.Free;
Bitmap.Free;
end
end;
然后将bitmap进行resize,再将缩放后的bitmap转回png ,从而达到png缩放的目的,结果出来了,但是png特有的alpha通道转没了。。所以看上去半透效果就没了,有时候甚至还有锯齿;
但是我们用ps或者iw进行png缩放的效果很好啊,而且保留了原来的alpha通道;
研究了半天,没研究出来,各位有什么好建议??这不是一个简单的问题哦。[]