降低图像质量
本文关键字:图像质量 | 更新日期: 2023-09-27 18:28:22
我正在使用Silverlight。我正在内存中加载许多图像(比如大约10000张),这会导致内存不足的异常。所以我需要通过尺寸、分辨率和重新采样来降低图像质量。请检查下面的代码。
for(int i=0;i<10000;i++)
{
Image img = new Image() { Height = height, Width = width };
img.Source = writableBimapimg; // returns WriteableBitmap
container.Children.Add(img);// throws memory exception
}
如何降低图像质量?
感谢
首先,只有对图像应用过滤器,才能减小图像大小,否则会得到质量和/或信息松散的图像(我以前也经历过)。
不幸的是,Silverlight不是一个很好的平台,因为它不支持任何类型的双线性、三线性或最近邻居过滤。
为了使用最近邻居过滤器减小图像大小,您可以在此处添加ImageTools库(由Sebastian Stehle创建)或作为Nuget包。
调整图像大小的代码可以是这样的(使用ImageTools)。
var extendedImage = writableBimapimg.ToImage(); //This is an extension from ImageTools. Make sure you have the "using ImageTools" in the namespaces;
var resizedImage = ExtendedImage.Resize(extendedImage, width, height, new ImageTools.Filtering.NearestNeighborResizer());
container.Children.Add(resizedImage.ToBitmap());
现在,为了处理这些内存问题,您需要小心为调整大小的图像选择大小。
拿一个计算器,看看你可以加载多少图像,考虑到使用2GB RAM后进程崩溃(至少对于silverlight 4)。
每像素32位,调整大小后的图像为100x100像素,您可以在内存中加载数千张图像,而不会出现任何问题。
希望它能有所帮助。