gpt4 book ai didi

c# - 如何将生成的位图加载到 PictureBox 中?

转载 作者:太空狗 更新时间:2023-10-30 01:27:50 24 4
gpt4 key购买 nike

那里似乎有很多图片框问题,但我还没有发现任何涉及将图片框的内容更改为位图的问题,而不仅仅是从文件中加载。

我的应用程序获取字节数组并从中生成位图。我真的想避免将写入文件作为中间处理步骤。

因为它是一个字节数组,而不是 2 个字节的字,所以我需要制作一个带有灰度调色板的索引位图。

然后我将索引位图转换为普通位图(24 位 rgb)。

这是导致我出错的代码:

pictureBox1.Image = (System.Drawing.Image)bmp2;

当我查看表单(图片框尝试绘制)时,线程将简单地停止执行并显示一条消息:“System.Drawing.Image.get_RawFormat() 中的参数无效”

我做错了什么?如何为图片框创建安全位图?

这就是创建“bmp2”的原因:

//creating the bitmap from the array
System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(100, 100, 100, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, MyIntPtr);

//creating a proper indexed palette
System.Drawing.Imaging.ColorPalette GrayPalette = bmp1.Palette;
for (int i = 0; i < GrayPalette.Entries.Length; i++)
{
GrayPalette.Entries[i] = Color.FromArgb(i, i, i);
}
bmp1.Palette = GrayPalette;

//creating a non-indexed, 24bppRGB bitmap for picturebox compatibility
System.Drawing.Bitmap bmp2 = new Bitmap(bmp1.Width, bmp1.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
Graphics gr = Graphics.FromImage(bmp2);
gr.DrawImage(bmp1, 0, 0);
gr.Dispose();

如果我使用 bmp1.Save(@"testfile.bmp"),我会得到一个完全可以接受的位图,看起来没有异常。

为什么我不能将我的位图用作我的 picturebox.Image?在将新位图加载到其中之前,是否需要更改图片框的其他参数?

最佳答案

好吧,我发现了我正在做的事情的问题。

我会尝试解释哪里出了问题,但作为一个非专业人士,我不确定我的解释有多准确。

显然,在 pictureBox 中设置图像不会在任何地方复制内存。后来在我的应用程序中(我展示的代码片段中的一些功能)我处理了变量“bmp1”。

我不知道与 bmp1 关联的内存在函数传递它的任何地方都是相同的内存,并且在销毁它时引发错误“System.Drawing.Image.get_RawFormat() 处的无效参数”。我想它这样做是因为每次重新绘制 pictureBox 时,它都会使用它的“图像”属性来绘制。因为我正在处理与“图像”属性关联的内存,所以我正在扼杀 picturebox_Paint 事件正常工作的所有希望。

我只希望我现在不会因为从不处理我创建的任何位图而发生内存泄漏。

关于c# - 如何将生成的位图加载到 PictureBox 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189384/

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