Russian Qt Forum

Qt => Вопросы новичков => Тема начата: demaker от Май 13, 2014, 15:31



Название: QImage::pixel
Отправлено: demaker от Май 13, 2014, 15:31
Пытаюсь закрасить область изображения при нажатии кнопки мыши

Код
C++ (Qt)
class GraphicsScene: public QGraphicsScene
{
   Q_OBJECT
 
public:
   explicit GraphicsScene(QObject*parent = 0): QGraphicsScene(parent)
   {
       sceneImage = new QImage("D:/Qt/Qt5.2.1/Tools/QtCreator/bin/Graphics/lodka.bmp");
       QPixmap pixmap;
       addPixmap(pixmap.fromImage(*sceneImage));
   }
 
   virtual ~GraphicsScene()
   {
       delete sceneImage;
   }
 
protected:
   void mousePressEvent(QGraphicsSceneMouseEvent* event)
   {        
       QPointF scenePoint = event->scenePos(); //положнеие курсора относительно сцены
 
       int y = (int)(scenePoint.y());
       int x = (int)(scenePoint.x());
       int xr = 0;
       int xl = 0;
 
       do
       {
           y = y + 1;
           xr = searchCoordX(x,y,1);
           xl = searchCoordX(x,y,-1);
           drawLine(xl,xr,y);
           x = (xl+xr)/2;
       }
       while(xr-xl == 0);
       QPixmap pixmap;
       addPixmap(pixmap.fromImage(*sceneImage));
   }
 
private:
   //попиксельно рисуем линию
   void drawLine(int xLeft,int xRight,int y)
   {
       int delta = xRight-xLeft;
       if(delta > 0)
       {
           for(int i = 0; i<delta; i++)
           {
               sceneImage->setPixel(xLeft + i, y ,0x00FFFF00U);
           }
       }
   }
 
   //определяем левую(-1), и правую(+1) координату линии
   int searchCoordX(int x,int y, int step)
   {
       int xCoord = x;
       qDebug()<<"x = "<<xCoord;
       while(sceneImage->pixel(xCoord,y) != 0x00000000U)//если не граница(черный цвет)
       {
           xCoord = xCoord + step;
       }
       return xCoord;
   }
 
private:
   QImage *sceneImage;
};
 

Но к сожалению в этом участке кода проблема
Код:
 int searchCoordX(int x,int y, int step)
    {
        int xCoord = x;
        qDebug()<<"x = "<<xCoord;
        while(sceneImage->pixel(xCoord,y) != 0x00000000U) //!!!!!!!!!!!!!
        {
            xCoord = xCoord + step;
        }
        return xCoord;
    }


xCoord во время выполнения while принимает значение 320, а не то которое ему передается изначально.

А если while заменить на if, то все впорядке
Код:
...
 if(sceneImage->pixel(xCoord,y) != 0x00000000U) //Ok
        {
            xCoord = xCoord + step;
        }


Не могу понять почему???


Название: Re: QImage::pixel
Отправлено: Bepec от Май 13, 2014, 15:38
Кхм. Хотите сказать что у вас переменная внезапно скачет куда то? Такое бывает, но лечится обычно пересборкой/перезапуском IDE/перезагрузкой.

Смотрите что у вас со степом и так далее.