.net 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

我对不同的图像大小和Windows窗体中的PictureBox存在问题。该框的大小为
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);
}