0

QImage にグラフが表示されており、マウスの右ボタンが押された場合に測定用に黄色のクロス (+) を設定したいと考えています。

        void foo::mousePressEvent(QMouseEvent *event)
        {
         if (event->button() == Qt::RightButton) {
            QPoint pos = event->pos();
            int x = pos.x();
           int y = pos.y();
          QLine line(x-5,y,x+5,y);
          QLine line(x,y-5,x,y+5);
          QPainter painter(&my_image);
          painter.setPen( Qt::red );
          painter.setBrush( Qt::yellow );
/*
QPainter::begin: Cannot paint on an image with the QImage::Format_Indexed8 format
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
*/


              painter.drawLine(line); //no effect 

         }
        }

Paintevent(...) でそれを行うと、元の写真が破棄されます。どうすればいいですか。

追加情報: イメージは索引付けされています。

 my_image.setColorCount(33);
    for(int i = 0;i<33;i++)
    {
        my_image.setColor(i,qRgb((unsigned char)palette[i*3], (unsigned char)palette[i*3+1], (unsigned char)palette[i*3+2]));
    }

my_imag には黒の背景があり、白で十字を描きたい --> (これはインデックス 32 です)

int color = 32;//_index_value_of_cross_color;

      for (int ix=x-5;ix<x+5;ix++) {
           my_image.setPixel(ix,y,color);
      }

      for (int iy=y-5;iy<y+5;iy++) {
           my_imag.setPixel(x,iy,color);
      }

しかし、私は効果がありません!

4

2 に答える 2

2

あなたのコメントから、Format_Indexed8 で QImage にペイントすることはできません。

QImage ドキュメントから:

警告: QImage::Format_Indexed8 形式の QImage へのペイントはサポートされていません。

QImage::Format_ARGB32_Premultiplied のような別の形式を選択すると、うまくいくはずです。

于 2011-12-02T15:09:07.810 に答える
1

もう 1 つの手っ取り早い方法は、単純に画像データに値を設定することです。

もう少し作業を行う必要があります - 行コマンドがないため、setpixelを参照してください

int x = pos.x();
int y = pos.y();
int color = _index_value_of_cross_color;

for (int ix=x-5;ix<x+5;ix++) {
     my_image.setPixel(ix,y,color);
}

for (int iy=y-5;iy<y+5;iy++) {
     my_image.setPixel(x,iy,color);
}
于 2011-12-02T16:53:25.890 に答える