我需要在pictureBox中显示RAM中的图像。我昨天花了一整天的时间试着让它发挥作用。这里有一些代码向您展示我目前正在尝试如何做,但我无法使System :: Drawing :: Bitmap工作。我得到的只是一个空的pictureBox。 我还写了一个BMP文件到我的磁盘,文件正如预期的那样(灰度噪声)。如果你能帮助我,我会很高兴的!
unsigned char* imgData;
imgData = (unsigned char*)malloc(100 * 100 * sizeof(unsigned char)*3);
for (int i = 0; i < 100 * 100; i++){
memset(imgData+ i*3,rand()%255, 3); //generates a random pixel vaoue between 0 and 255 and then assigns all three colors of a pixel to it
}
// this->textBox1->Text += "Values: " + *(imgData + 1) + " \r\n";
const char* fname;
fname = "test.bmp";
write_bmp(fname, 100, 100, (char*)imgData); //writes 24-bit BMP File
System::Drawing::Bitmap ^mybm = gcnew System::Drawing::Bitmap(
100, 100, 100*sizeof(unsigned char)*3,
System::Drawing::Imaging::PixelFormat::Format24bppRgb,
(System::IntPtr) imgData);
this->pictureBox1->Image = mybm;
this->pictureBox1->Show();
free(imgData);
答案 0 :(得分:1)
来自MSDN主题Bitmap Constructor (Int32, Int32, Int32, PixelFormat, IntPtr)
:
调用者负责分配和释放scan0参数指定的内存块。但是,在释放相关位图之前不应释放内存。
在您的情况下,您在创建imgData
后立即释放Bitmap
数组。根据构造函数的要求,在Bitmap
处于活动状态时,始终保持此数组的持久性。