【发布时间】:2014-05-15 19:29:05
【问题描述】:
我需要在图片框中显示来自 RAM 的图像。我昨天花了一整天的时间来尝试让它工作。这里有一些代码向您展示我目前是如何尝试这样做的,但我无法让 System::Drawing::Bitmap 工作。我得到的只是一个空的图片框。 我还将一个 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);
【问题讨论】:
-
我认为stride参数应该是
100*sizeof(unsigned char)*3 -
为了测试,从文件
test.bmp创建Bitmap,你有什么结果? -
stride参数已经调整,但是pictureBox仍然没有显示图像。可以使用任何图像编辑程序打开硬盘上的 bmd 文件。我对 c++ 比较陌生,我无法从文件建议中创建位元: System::Drawing::Bitmap ^fromFile = gcnew System::Drawing::Image::FromFile("test.bmp");我得到“预期的类型标识符”
-
不要为此使用
gcnew;System::Drawing::Image::FromFile是静态函数,不是类型。 -
我上面显示的代码是按钮单击事件的一部分,这意味着每次按下按钮都会生成一个新图像。如果我使用 System::Drawing::Image ^fromFile = System::Drawing::Bitmap::FromFile("test.bmp"); 加载图像它正确显示在图片框中,但如果我按下按钮将不会更新。但是,保存图像然后从 HDD 读取它不是我在这里寻找的,因为我不想在能够查看之前保存每个图像(程序将处理 RAM 中的数百个图像)
标签: .net c++-cli picturebox