gpt4 book ai didi

c++ - wxImage 并绘制原始 rgb 字节

转载 作者:行者123 更新时间:2023-11-28 07:45:44 25 4
gpt4 key购买 nike

我正在将图像查看器编程作为学校任务,我不能使用任何库来读取或操作图像。首先,我从 bmp 格式开始。我已经创建了处理此类文件的类。作为 GUI 框架,我使用 wxWidgets。

所以我有普通的 rgb 字节数组,为 wxImage 构造函数准备

wxImage(int width, int height, unsigned char* data, bool static_data = false).

问题是,当我将它转换为 wxBitmap 并绘制为 dc 时,它忽略了 rgb 值,只绘制了黑色图片。我真的不知道可能是什么问题。这是我绘制图像的代码:

DrawImage(wxDC &dc)
{
BYTE *rgbArray = bmpFile->GetRGB();
wxSize imageSize = wxSize(bmpFile->GetSize().w,bmpFile->GetSize().h);
wxImage image = wxImage(imageSize, &rgbArray);
wxBitmap bitmap = wxBitmap(image);
dc.DrawBitmap(bitmap,5,5, false);
}

这是在绘画事件上:

void OnPaint(wxPaintEvent& event)
{
wxAutoBufferedPaintDC dc(canvas);
dc.SetBackground( wxBrush(canvas->GetBackgroundColour()));
dc.Clear();
DrawImage(dc);
}

rgbArray 填充了正确的值,我检查了很多次。

感谢您的帮助:)

最佳答案

那是因为您可能正在调用此函数,因为您正在传递 BYTE**。

wxImage (const wxSize &sz, bool clear=true)

要调用另一个重载,删除 & 可能会有所帮助

wxImage image = wxImage(imageSize, rgbArray);

为了使代码异常安全,必须对其进行轻微的重写。我不知道 bmpFile 返回的是新缓冲区还是指向它自己的数据缓冲区的指针。如果它没有返回一个新的缓冲区,那么你必须制作你自己的拷贝,因为 wxImage 取得了缓冲区的所有权。见wxImage

DrawImage(wxDC &dc)
{
wxSize imageSize = wxSize(bmpFile->GetSize().w,bmpFile->GetSize().h);
wxImage image = wxImage(imageSize, bmpFile->GetRGB() );
wxBitmap bitmap = wxBitmap(image);
dc.DrawBitmap(bitmap,5,5, false);
}

DrawImage(wxDC &dc)
{
std::unique_ptr<BYTE> rgbData( bmpFile->GetRGB() );
wxSize imageSize = wxSize(bmpFile->GetSize().w,bmpFile->GetSize().h);
wxImage image = wxImage(imageSize, rgbData.release()) );
wxBitmap bitmap = wxBitmap(image);
dc.DrawBitmap(bitmap,5,5, false);
}

关于c++ - wxImage 并绘制原始 rgb 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14910748/

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