[Qt-interest] How to paint the Background of QImage without loosing its Foreground Contents.
John McClurkin
jwm at nei.nih.gov
Fri Jul 31 20:05:12 CEST 2009
varun singh wrote:
> hi,
>
> Well, i'm trying to make a painting application. I'm getting some trouble with setting the background color.
>
> I've QImage object as my painting space, hence i used QImage->fill() fuction to fill the QImage with a particular color.
>
> But, if i scribble something on QImage (with Pen) and then use fill function, it clears everything n fills the image with the new color (well, that's obvious)...
>
> Hence I've run nested for loops to access each pixel of Qimage and check whether it is already colored with Pen, if it is not then i call setPixel() function to color it with background color.
>
> But its not working, each pixel is still getting painted.
>
> Here is the code
>
> ******************************************************************************
> //mBColor is of type QRgb.
> void PaintWidget::setBColor(QRgb color) //sets the Background Color
> {
> mBColor = color;
> int x, y;
> for(x = 0; x <= mPaintImage->width() - 1; x++)
> {
> for(y = 0; y <= mPaintImage->height() - 1; y++)
> {
> if(QColor(mPaintImage->pixel(x, y)) != mFColor) //mFColor is
> { //Foregournd
> mPaintImage->setPixel(x, y, mBColor); //Ccolor.
> }
> }
> }
> emit bColorChanged(mBColor);
> update();
> }
>
> *******************************************************************************
>
> I'm Desperately looking for some help.
>
Well, your code looks good so the most obvious explanation is that the
QColor that is created by your call
QColor(mPaintImage->pixel(x, y))
is different from mFColor, even when the pixel in mPaintImage was
colored by mFColor. You are probably going to have to single step this
in a debugger and check values, possibly even (God forbid) dump the
mPaintImage pixel values to a text file. You might try something like:
for(y = 0; y <= mPaintImage->height() - 1; y++)
{
pColor = QColor(mPaintImage->pixel(x, y);
if(pColor != mFColor)
{
mPaintImage->setPixel(x, y, mBColor);
}
}
Putting a break point on the if statement would let you examine both
pColor and mFColor. Grueling work. Glad I don't have to do it.
More information about the Qt-interest-old
mailing list