我正在开发需要生成动画GIF图像的Metro应用程序。

我发现this tutorial,女巫似乎是Metro应用动画GIF上的唯一资源。

运行此代码时,SetPixelData方法将引发异常,告诉我分配的缓冲内存不足(即使我的Visual Studio环境是英语,该消息也使用我的OS语言,我认为可能是相关的)。

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

知道此内存问题可能从何而来吗?我的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;
                }
            }

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

10-15 08:55