.net Windows窗体PictureBox位图大小问题
我对不同的图像大小和Windows窗体中的PictureBox存在问题。该框的大小为.net Windows窗体PictureBox位图大小问题,.net,winforms,c++-cli,picturebox,.net,Winforms,C++ Cli,Picturebox,我对不同的图像大小和Windows窗体中的PictureBox存在问题。该框的大小为640*480像素。显示不同的图像大小可以正常工作,但某些图像大小会导致程序崩溃,原因是参数无效将位图分配给Picturebox的行中出现异常: System::Drawing::Bitmap ^pictureBimage = gcnew System::Drawing::Bitmap(resEnhWidth, resEnhHeight, resEnhWidth * sizeof(char)* 3, System
640*480
像素。显示不同的图像大小可以正常工作,但某些图像大小会导致程序崩溃,原因是参数无效
将位图分配给Picturebox的行中出现异常:
System::Drawing::Bitmap ^pictureBimage = gcnew System::Drawing::Bitmap(resEnhWidth, resEnhHeight, resEnhWidth * sizeof(char)* 3, System::Drawing::Imaging::PixelFormat::Format24bppRgb, (System::IntPtr) pictureBox24bitLargeImage);
this->pictureBox1->Image = pictureBimage;
this->pictureBox1->Show();
650*600
起作用,640*480
也起作用,但例如550*630
会导致崩溃。你们中有人知道为什么以及如何解决这个问题吗
干杯
编辑:
这可能有助于解决问题:每当图像显示在pictureBox中时,pictureBox24bitLargeImage
都会刷新:
unsigned char* temp = getByteImFromImageData(showThis2, (hScrollBar2->Value)*width*height, width*height, manContrast);
for (int i = 0; i < width * height; i++){
memset(pictureBox24bitImage + 3 * i, *(temp + i), 3);
}
if (draw_Rectangle){
drawRectangle(pictureBox24bitImage, rect_upperLeftCorner, rect_lowerRightCorner, width, height);
}
free(temp);
您是否尝试过另一个位图构造函数重载,并查看是否再次遇到此问题?所有图像的类型是否相同?如何使用位图构造函数的另一个重载?这些图像都是同一类型的。值介于0和255之间的RGB位图@Deniseskimore其他位图构造器:您是否在多个位置使用图像?如果要在多个PictureBox控件中使用同一映像,请为每个PictureBox创建映像的克隆。从多个控件访问同一映像会导致出现异常
unsigned char* getByteImFromImageData(double *image, int start, int size, bool useManContrast){
unsigned char* newim;
newim = (unsigned char*)malloc(size*sizeof(unsigned char));
double mini = +INFINITY;
double maxi = 0;
if (!useManContrast){
for (int i = 0; i < size; i++){
if (*(image + start + i) > maxi) maxi = *(image + start + i);
if (*(image + start + i) < mini) mini = *(image + start + i);
}
for (int i = 0; i < size; i++){
*(newim + i) = (*(image + start + i) - mini) / (maxi - mini) * 255.0;
}
}
else {
mini = contrastMin;
maxi = contrastMax;
double temp;
for (int i = 0; i < size; i++){
temp = (*(image + start + i) - mini) / (maxi - mini) * 255.0;
if (temp>255) temp = 255;
if (temp < 0) temp = 0;
*(newim + i) = (unsigned char) temp;
}
}
return(newim);
}