0

更新:エラーは次の行で生成されているようです: *line = color;

次のエラーが表示されますが、どこから来たのかわかりません。

エラー:

HEAP [testQt.exe]: 0B44C6B0 で変更された 0B444FE8 のヒープ ブロックが、要求されたサイズの 76c0 を超えました

それを生成する行:

return QPixmap::fromImage(qimage);

から:

QPixmap Interpolation::getData() {
    QPointF pt(0, 0);
    QRgb color;
    QImage qimage(m_width, m_height, QImage::Format_ARGB32);
    qimage.fill(Qt::transparent);

    for (int i(0); i < m_height; ++i) {
        m_progress->setValue(m_width+i);
        QRgb *line = (QRgb *)qimage.scanLine(i);
        for (int j(0); j < m_width; ++j) {
            pt.setX(j);
            pt.setY(i);
            line += 1;
            if (isInHull(pt)) {
                color = colorScale(interp(&pt));
                *line = color; //If I remove this part the program won't crash
            }
        }
    }  
    return QPixmap::fromImage(qimage);
}

それが役立つ場合:

QRgb Interpolation::colorScale(qreal value)
{
    int cat;
    cat = qFloor(qreal(9)*(value-m_min)/(m_max-m_min));

    return m_couleurs[cat];
}

と:

m_couleurs[0] = qRgb(247, 252, 240);
m_couleurs[1] = qRgb(224, 243, 219);
m_couleurs[2] = qRgb(204, 235, 197);
m_couleurs[3] = qRgb(168, 221, 181);
m_couleurs[4] = qRgb(123, 204, 196);
m_couleurs[5] = qRgb(78, 179, 211);
m_couleurs[6] = qRgb(43, 140, 190);
m_couleurs[7] = qRgb(8, 104, 172);
m_couleurs[8] = qRgb(8, 64, 129);

任意のリードをいただければ幸いです。

編集:役立つ場合に備えて、完全な機能を追加しました。Edit2: コードをより明確にし、無駄な部分を削除しました。Edit3: 質問を更新しました。

4

1 に答える 1

6

*line に色を割り当てる前に行を進めます。したがって、j = 0 の場合、実際にはピクセル 1 を設定しています。最後のスキャン ラインの最後のピクセルの最後で、バッファの最後を超えて書き込みます。

行 += 1 をループの最後に移動します。

于 2012-06-22T15:47:45.097 に答える