PaintOp and accessing pixels

Cyrille Berger cberger at cberger.net
Fri Oct 17 08:36:54 CEST 2008


Hello,

First things, you need to use oldRawData for the read accessor, and also use a 
KisRectConstIterator.


KisRectConstIterator readIt = device->createConstIterator( curXi - m_radius, 
curYi - m_radius, 2 * m_radius, 2 * m_radius );

    while( !readIt.isDone() )
    {
	int x = readIt.x();
        int y = readIt.y();
	    newX = x - centerX;
            newY = y - centerY;
            //t = sqrt(newX*newX + newY*newY);
            //t /= norma;
            //rotX = cos(-alpha * t) * newX - sin(-alpha * t) * newY;
            //rotY = sin(-alpha * t) * newX + cos(-alpha * t) * newY;

            rotX = cos(-alpha) * newX - sin(-alpha ) * newY;
            rotY = sin(-alpha) * newX + cos(-alpha ) * newY;

            // scale 
            rotX = newX/scale;
            rotY = newY/scale;

            newX = rotX + centerX;
            newY = rotY + centerY;

            if (point_interpolation( &newX, &newY, m_image ) )
            {
                // read pixelValue
                m_writeAccessor->moveTo(x,y);
                memcpy(m_writeAccessor->rawData() , readIt->oldRawData() , 
m_pixelSize );
            }
    }

The use of oldRawData should fix the issue of paint incrementaly. As for 
non-incrementaly, well lets say it's not supported by your paintop now ;) I 
am not sure if it is useful for deform or duplicate op.
-- 
Cyrille Berger


More information about the kimageshop mailing list