0

我在媒体库中有大图像(5000 * 5000 像素)。我只需要拍摄部分图像。假设它从 x=200 y=200 及其 1000 像素的宽度和高度开始。我怎样才能做到这一点 ?我对此没有任何好的解决方案。

我找到的唯一解决方案:

使用 photochoosertask.... 然后

var b = new WriteableBitmap(5000, 5000);
 b.LoadJpeg(e.ChosenPhoto);
 WriteableBitmap wb = b.Crop(200, 200, 1000, 1000);
 image1.Source = wb

但结果质量很差,我也遇到了一些内存问题......

4

1 回答 1

0

这里的问题是您正在创建大小为 1000x1000 的 WriteableBitmap。当您调用 LoadJpeg 时,它会将您的图像加载到该分辨率,这会导致质量问题。当你收割时,情况会变得更糟。

当您尝试处理大图片时,内存问题是很正常的。为避免这种情况,您最好使用 SetSource 方法,该方法会自动将您的照片缩放到 2000x2000 像素以下。如果您想了解更多相关信息,可以在我的博客上找到详细信息

不过,使用 Crop 方法是可行的方法。采取的步骤包括:

  • 从流源创建 BitmapImage,然后从中创建 WriteableBitmap(或者,创建一个大小为 5000,5000 的 WriteableBitmap,这是您想要的,但会导致内存问题)
  • 调用 Crop 方法,但缩放所有内容以匹配使用 SetSource 时获得的分辨率 - 应为 2000x2000 或更小。
  • 将 image1.Source 设置为新创建的 WB。
于 2013-03-31T19:27:46.943 回答