-1

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

如何降低图像质量?

谢谢

4

1 回答 1

1

首先,如果您对图像应用过滤器,则只能减小图像大小,否则您会得到质量和/或信息松散的图像(我之前已经经历过)。

不幸的是,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());

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

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

拥有每像素 32 位和调整大小的 100x100 像素的图像,您可以毫无问题地将数千张图像加载到内存中。

希望它有所帮助。

于 2013-08-21T12:43:07.460 回答