BitmapEncoder SetPixelData内存分配
本文关键字:分配 内存 SetPixelData BitmapEncoder | 更新日期: 2023-09-27 18:11:53
我正在开发一个Metro应用程序,需要生成一个GIF动画图像。
我发现这个教程,巫婆似乎是唯一的资源在动画gif地铁应用程序。
运行此代码时,在SetPixelData方法上抛出异常,告诉我分配的缓冲区内存不足(该消息是在我的操作系统语言中,即使我的Visual Studio环境是英语,我认为这可能是相关的)。
我已经减小了图像大小(源和输出)和帧数,但我仍然得到这个错误。(我在同一个应用程序中操作更大的图像和字节数组)。
你知道这个内存问题是怎么来的吗?我的StorageFile可能有问题?
当传入SetPixelData的frameWidth'Height与像素数据不匹配时,我看到了这个异常。
我以下面这个例子结束。当尺寸与pixelData不匹配时,我看到了您提到的例外。
我认为这在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;
}
}
缓冲区大小乘以位深。