gpt4 book ai didi

c# - BitmapEncoder SetPixelData内存分配

转载 作者:行者123 更新时间:2023-11-30 17:54:05 28 4
gpt4 key购买 nike

我正在开发一个 Metro 应用程序,我需要在其中生成动画 GIF 图像。

我找到了 this tutorial , witch 似乎是 Metro 应用程序动画 GIF 的唯一资源。

运行此代码时,SetPixelData 方法抛出异常,告诉我分配的缓冲区内存 不足(尽管我的 Visual Studio 环境是英语,但消息是我的操作系统语言,我认为这可能是相关的)。

我已经减小了图像大小(源和输出)和帧数,但我仍然遇到此错误。 (我在同一个应用程序中操作更大的图像和字节数组)。

知道这个内存问题是从哪里来的吗?可能是我的 StorageFile 有问题?

最佳答案

当传递到 SetPixelData 的 frameWidth\Height 与像素数据不匹配时,我看到了这个异常。

我以下面这个例子结束。当尺寸与像素数据不匹配时,我看到了您提到的异常。

我认为这在 Windows 8.1 中更稳定,因为它不会重现。

BitmapDecoder decoder = await BitmapDecoder.CreateAsync(sourceStream);
BitmapTransform transform = new BitmapTransform()
{
ScaledHeight = 900,
ScaledWidth = 600
};
PixelDataProvider pixelData = await decoder.GetPixelDataAsync(BitmapPixelFormat.Rgba8,
BitmapAlphaMode.Straight,
transform,
ExifOrientationMode.RespectExifOrientation,
ColorManagementMode.DoNotColorManage);

StorageFile destinationFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(Path.Combine(Database.rootMoviesFoldersPaths, movie.LocalId + ".jpg"));
using (var destinationStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, destinationStream);
encoder.SetPixelData(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Premultiplied, 600, 900, 96, 96, pixelData.DetachPixelData());
await encoder.FlushAsync();

movie.HasFolderImage = true;

return true;
}
}

关于c# - BitmapEncoder SetPixelData内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356274/

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