gpt4 book ai didi

c# - 调整生成的相机流的大小

转载 作者:行者123 更新时间:2023-11-30 12:16:14 26 4
gpt4 key购买 nike

我正在尝试让用户捕获图像并使用图像将其添加到屏幕上。但是,由于内存限制,我还需要将此图像的大小调整为大约一半大小(12x 5MP 图像在手机上从来都不好......)

我正在正常启动相机任务,它会调用 Completed 事件。但是,当我尝试使用 DecodeJpeg 时,出现“参数不正确”的提示。异常。

这是我调整大小的代码,其中 mx 和 my 是表示尺寸的 int。我已经验证了 e.ChosenPhoto 中有一些长度约为 ~5500 的东西:

WriteableBitmap bitmap = PictureDecoder.DecodeJpeg(e.ChosenPhoto, mx, my);
Image img = new Image();
img.Source = bitmap;

第一行是应用程序崩溃的地方。有什么想法吗?

编辑:PhotoChooserTask 的结果也会发生这种情况....

最佳答案

尝试使用 System.Windows.Media.Imaging - Extensions.LoadJpeg方法而不是 PictureDecoder.DecodeJpeg .还要确保流位于流的开头。如果您已经使用过该流,则需要使用以下方法重置它:

MyImageStream.Seek(0, System.IO.SeekOrigin.Begin)

我在尝试访问原始图像时遇到了很多问题,特别是因为 BitmapImage automatically resizes images over 2000x2000 .如果您想要大于 2000x2000 的图像,您必须能够访问原始流并将其加载到 WriteableBitmap object 中。

如果您想查看一些更复杂的图像处理代码,包括使用 ExifLib 从图像流中检测分辨率并使用 WriteableBitmap Extensions 旋转流查看 BarcodeCaptureResult Silverlight ZXing Library 的类.

更新:由于您只想根据 e.ChosenPhoto 结果调整图像大小,因此我从 Silverlight ZXing 库中提取了代码。这应该有效:

WriteableBitmap wbBarcodeImage = new WriteableBitmap(mx, my);
Extensions.LoadJpeg(wbBarcodeImage, e.ChosenPhoto);//Load JPEG from stream into our re-sized writeable bitmap

请注意,您需要使用正确的高宽比,否则图像底部或侧面会出现黑条。您可以使用 ExifLib 检测原始图像大小并使用它进行缩放(请参阅上面链接的 BarcodeCaptureResult 中的 GetWriteableBitmap 方法)

关于c# - 调整生成的相机流的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com