QImage 出现错误,尽管我正在阻止它

QImage is getting an error eventhough I'm preventing it

我正在玩弄 QImage 和 QGraphics 视图。我试图计算两个图像之间的欧几里德距离,我知道它很慢但没关系,我收到了这个错误

ASSERT failure in QVector<T>::at: "index out of range", file c:\work\build\qt5_workdir\w\s\qtbase\include\qtcore\../../src/corelib/tools/qvector.h, line 377

每当我通过这些线路时

for(int row = 0; row < 128 ; row++){
    for(int col = 0; col < 128; col++){
        if(this->Imagem->valid(row, col)){
            qDebug() << "1";
            this->Imagem->pixel(row, col);
        }
        else
            qDebug() << "2";
    }
}

它总是在终端上输出“1”并崩溃。我用

声明图像
this->Imagem = new QImage(128, 128, QImage::Format_Indexed8);
this->Imagem->fill(QColor(Qt::black).rgb());

我什至在检查这些点是否在图像的边界内,而且很明显是这样。

注意 QImage::valid 需要 (col, row),而不是 (row, col)(即第一个参数是 X,第二个 Y);然而,这对于 128x128 图像应该没有影响。

可能是您正在访问的对象已经被销毁(例如,因为您对所有权的处理有问题),但如果不查看更多代码就很难判断。

Format_Indexed8 使用手动定义的颜色 table,其中每个索引代表一种颜色。在操作像素之前,您必须为图像设置颜色 table:

QVector<QRgb> color_table;
for (int i = 0; i < 256; ++i) {
    color_table.push_back(qRgb(i, i, i)); // Fill the color table with B&W shades
}
Imagem->setColorTable(color_table);

或者您可以手动设置当前颜色的每个索引table:

Imagem->setColorCount(4); // How many colors will be used for this image
Imagem->setColor(0, qRgb(255, 0, 0));   // Set index #0 to red
Imagem->setColor(1, qRgb(0, 0, 255));   // Set index #1 to blue
Imagem->setColor(2, qRgb(0, 0, 0));     // Set index #2 to black
Imagem->setColor(3, qRgb(255, 255, 0)); // Set index #3 to yellow
Imagem->fill(1); // Fill the image with color at index #1 (blue)

如您所见,Format_Indexed8 像素值代表 而不是 RGB 颜色,但索引值(又代表您在颜色 table).

中设置的颜色

如果你不想处理颜色 tables,你可以简单地使用另一种格式,例如 Format_RGB32.