降低图像质量

时间:2013-08-21 05:29:11

标签: c# silverlight

我正在使用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
}

如何降低图像质量?

由于

1 个答案:

答案 0 :(得分:1)

首先,如果您对图像应用过滤器,则只能缩小图像大小,否则会得到质量和/或信息质量下降的图像(我以前经历过这种情况)。

不幸的是,Silverlight并不是一个非常好的平台,因为它不支持任何类型的双线性,三线性或最近邻滤波。

为了使用最近邻过滤器缩小图像大小,您可以添加ImageTools库(由Sebastian Stehle创建)可用here或作为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());

现在,为了处理这些内存问题,您需要仔细考虑为调整大小的图像选择的大小。

获取计算器并找出可以加载的图像数,考虑到使用2 GB RAM后进程崩溃(至少对于silverlight 4)。

每像素32位,调整大小为100x100像素,你可以在内存中加载数千张图像,没有任何问题。

希望它有所帮助。