Пытаюсь закрасить область изображения при нажатии кнопки мыши
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;
}
Не могу понять почему???
Кхм. Хотите сказать что у вас переменная внезапно скачет куда то? Такое бывает, но лечится обычно пересборкой/перезапуском IDE/перезагрузкой.
Смотрите что у вас со степом и так далее.