|
|
|
This is a working document. It list the places where pixels are mangled and requested functions to do it in an colorstrategy independent way
|
|
|
|
|
|
|
|
The purpose is to find out which functions an API in colorstrategy must have to support pixelmangling in a colorstretegy independent manner.
|
|
|
|
|
|
|
|
|
|
|
|
Requested function: apply an alpha mask to pixels
|
|
|
|
Problem: alpha is hard-coded 8-bit in KisPixel, when it should be free
|
|
|
|
|
|
|
|
void KisPaintDevice::clearSelection()
|
|
|
|
{
|
|
|
|
if (!hasSelection()) return;
|
|
|
|
|
|
|
|
QRect r = m_selection -> selectedRect();
|
|
|
|
r = r.normalize();
|
|
|
|
|
|
|
|
for (Q_INT32 y = 0; y < r.height(); y++) {
|
|
|
|
KisHLineIterator devIt = createHLineIterator(r.x(), r.y() + y, r.width(), true);
|
|
|
|
KisHLineIterator selectionIt = m_selection -> createHLineIterator(r.x(), r.y() + y, r.width(), false);
|
|
|
|
|
|
|
|
while (!devIt.isDone()) {
|
|
|
|
KisPixel p = toPixel(devIt.rawData());
|
|
|
|
KisPixel s = m_selection -> toPixel(selectionIt.rawData());
|
|
|
|
// XXX: Why Q_UIN16 here? Doesn't that clash with UINT8_MULT later on?
|
|
|
|
Q_UINT16 p_alpha, s_alpha;
|
|
|
|
p_alpha = p.alpha();
|
|
|
|
s_alpha = MAX_SELECTED - s.alpha();
|
|
|
|
|
|
|
|
p.alpha() = UINT8_MULT(p_alpha, s_alpha);
|
|
|
|
|
|
|
|
++devIt;
|
|
|
|
++selectionIt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void KisPaintDevice::applySelectionMask(KisSelectionSP mask)
|
|
|
|
{
|
|
|
|
QRect r = mask -> extent();
|
|
|
|
crop(r);
|
|
|
|
|
|
|
|
for (Q_INT32 y = r.top(); y <= r.bottom(); ++y) {
|
|
|
|
|
|
|
|
KisHLineIterator pixelIt = createHLineIterator(r.x(), y, r.width(), true);
|
|
|
|
KisHLineIterator maskIt = mask -> createHLineIterator(r.x(), y, r.width(), false);
|
|
|
|
|
|
|
|
while (!pixelIt.isDone()) {
|
|
|
|
|
|
|
|
KisPixel pixel = toPixel(pixelIt.rawData());
|
|
|
|
KisPixel maskValue = mask -> toPixel(maskIt.rawData());
|
|
|
|
|
|
|
|
pixel.alpha() = (pixel.alpha() * maskValue.alpha()) / MAX_SELECTED;
|
|
|
|
|
|
|
|
++pixelIt;
|
|
|
|
++maskIt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|