gpt4 book ai didi

c# - 调用 BitmapEncoder.SetPixelData 时出现 "The buffer allocated is insufficient"异常

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

我想在我的 Windows 8 应用程序中创建一个白色图像运行时。我想我会创建一个字节数组,然后写入文件。但我收到异常 分配的缓冲区不足。 (HRESULT 异常:0x88982F8C)。我的代码有什么问题?

double dpi = 96;
int width = 128;
int height = 128;
byte[] pixelData = new byte[width * height];

for (int y = 0; y < height; ++y)
{
int yIndex = y * width;
for (int x = 0; x < width; ++x)
{
pixelData[x + yIndex] = (byte)(255);
}
}

var newImageFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("white.png", CreationCollisionOption.GenerateUniqueName);

using (IRandomAccessStream newImgFileStream = await newImageFile.OpenAsync(FileAccessMode.ReadWrite))
{

BitmapEncoder bmpEncoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, newImgFileStream);

bmpEncoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Premultiplied,
(uint)width,
(uint)height,
dpi,
dpi,
pixelData);

await bmpEncoder.FlushAsync();
}

最佳答案

小心你的BitmapPixelFormat!

BitmapPixelFormat.Bgra8 表示 每个 channel 1 个字节,导致每个像素 4 个字节 - 您正在计算每个像素 1 个字节。 (更多信息:http://msdn.microsoft.com/en-us/library/windows/apps/windows.graphics.imaging.bitmappixelformat.ASPx)

因此相应地增加缓冲区大小。 ;)

示例代码:

int width = 128;
int height = 128;
byte[] pixelData = new byte[4 * width * height];

int index = 0;
for (int y = 0; y < height; ++y)
for (int x = 0; x < width; ++x)
{
pixelData[index++] = 255; // B
pixelData[index++] = 255; // G
pixelData[index++] = 255; // R
pixelData[index++] = 255; // A
}

关于c# - 调用 BitmapEncoder.SetPixelData 时出现 "The buffer allocated is insufficient"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18824873/

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