(.net)pictureBox显示来自RAM的图像

时间:2014-05-15 08:47:56

标签: .net c++-cli picturebox

我需要在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);

1 个答案:

答案 0 :(得分:1)

来自MSDN主题Bitmap Constructor (Int32, Int32, Int32, PixelFormat, IntPtr)

调用者负责分配和释放scan0参数指定的内存块。但是,在释放相关位图之前不应释放内存。

在您的情况下,您在创建imgData后立即释放Bitmap数组。根据构造函数的要求,在Bitmap处于活动状态时,始终保持此数组的持久性。