本文整理汇总了C++中KisPaintDeviceSP::createRectIterator方法的典型用法代码示例。如果您正苦于以下问题:C++ KisPaintDeviceSP::createRectIterator方法的具体用法?C++ KisPaintDeviceSP::createRectIterator怎么用?C++ KisPaintDeviceSP::createRectIterator使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类KisPaintDeviceSP
的用法示例。
在下文中一共展示了KisPaintDeviceSP::createRectIterator方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: apply
void KisBidirectionalMixingOption::apply(KisPaintDeviceSP dab, KisPaintDeviceSP device, KisPainter* painter, qint32 sx, qint32 sy, qint32 sw, qint32 sh, quint8 pressure, const QRect& dstRect)
{
if (!isChecked()) return;
KoColorSpace *cs = dab->colorSpace();
KisPaintDeviceSP canvas = new KisPaintDevice(cs);
KisPainter p(canvas);
p.setCompositeOp(COMPOSITE_COPY);
p.bitBlt(sx, sy, device, dstRect.x(), dstRect.y(), sw, sh);
int count = cs->channelCount();
KisRectIterator cit = canvas->createRectIterator(sx, sy, sw, sh);
KisRectIterator dit = dab->createRectIterator(sx, sy, sw, sh);
QVector<float> cc(count), dc(count);
while (!cit.isDone()) {
if (cs->alpha(dit.rawData()) > 10 && cs->alpha(cit.rawData()) > 10) {
cs->normalisedChannelsValue(cit.rawData(), cc);
cs->normalisedChannelsValue(dit.rawData(), dc);
for (int i = 0; i < count; i++)
dc[i] = (1.0 - 0.4 * pressure) * cc[i] + 0.4 * pressure * dc[i];
cs->fromNormalisedChannelsValue(dit.rawData(), dc);
if (dit.x() == (int)(sw / 2) && dit.y() == (int)(sh / 2))
painter->setPaintColor(KoColor(dit.rawData(), cs));
}
++cit;
++dit;
}
}
示例2: process
void KisFilterColorToAlpha::process(KisConstProcessingInformation srcInfo,
KisProcessingInformation dstInfo,
const QSize& size,
const KisFilterConfiguration* config,
KoUpdater* progressUpdater
) const
{
const KisPaintDeviceSP src = srcInfo.paintDevice();
KisPaintDeviceSP dst = dstInfo.paintDevice();
QPoint dstTopLeft = dstInfo.topLeft();
QPoint srcTopLeft = srcInfo.topLeft();
Q_ASSERT(src != 0);
Q_ASSERT(dst != 0);
if (config == 0) config = new KisFilterConfiguration("colortoalpha", 1);
QVariant value;
QColor cTA = (config->getProperty("targetcolor", value)) ? value.value<QColor>() : QColor(255, 255, 255);
int threshold = (config->getProperty("threshold", value)) ? value.toInt() : 0;
qreal thresholdF = threshold;
KisRectIteratorPixel dstIt = dst->createRectIterator(dstTopLeft.x(), dstTopLeft.y(), size.width(), size.height(), dstInfo.selection());
KisRectConstIteratorPixel srcIt = src->createRectConstIterator(srcTopLeft.x(), srcTopLeft.y(), size.width(), size.height(), srcInfo.selection());
int totalCost = size.width() * size.height() / 100;
if (totalCost == 0) totalCost = 1;
int currentProgress = 0;
const KoColorSpace * cs = src->colorSpace();
qint32 pixelsize = cs->pixelSize();
quint8* color = new quint8[pixelsize];
cs->fromQColor(cTA, color);
while (! srcIt.isDone()) {
if (srcIt.isSelected()) {
quint8 d = cs->difference(color, srcIt.oldRawData());
qreal newOpacity; // = cs->opacityF(srcIt.rawData());
if (d >= threshold) {
newOpacity = 1.0;
} else {
newOpacity = d / thresholdF;
}
memcpy(dstIt.rawData(), srcIt.rawData(), pixelsize);
if(newOpacity < cs->opacityF(srcIt.rawData()))
{
cs->setOpacity(dstIt.rawData(), newOpacity, 1);
}
}
if (progressUpdater) progressUpdater->setProgress((++currentProgress) / totalCost);
++srcIt;
++dstIt;
}
delete[] color;
}
示例3: computeInterestPoints
//.........这里部分代码省略.........
// memmove(infoValue, infoValue + 1, 4*sizeof(float[6]));
for (int i = 0; i < 5; i++) {
memcpy(infoValue[i], infoValue[i+1], 6*sizeof(float));
}
++vitinfoDeviceRead;
++vitinfoDevice;
}
vitinfoDeviceRead.nextCol();
vitinfoDevice.nextCol();
}
}
#endif
#if 0
KisTransaction("", infoDevice);
dbgPlugins << " Blur";
{
// Compute the blur mask
KisAutobrushShape* kas = new KisAutobrushCircleShape(5, 5, 2, 2);
QImage mask;
kas->createBrush(&mask);
KisKernelSP kernel = KisKernel::fromQImage(mask);
// Apply the convolution to xxDevice
KisConvolutionPainter infoDevicePainter(infoDevice);
infoDevicePainter.beginTransaction("bouuh");
infoDevicePainter.applyMatrix(kernel, 2, 2, rect.width() - 4, rect.height() - 4, BORDER_REPEAT);
delete kas;
}
#endif
dbgPlugins << " compute curvatures";
// Compute the curvatures
{
KisRectIteratorPixel vitinfoDeviceRect = infoDevice->createRectIterator(2, 0, rect.width() - 2, rect.height() - 2);
for (;!vitinfoDeviceRect.isDone(); ++vitinfoDeviceRect) {
float* infoValue = reinterpret_cast<float*>(vitinfoDeviceRect.rawData());
float det = infoValue[INFO_XX] * infoValue[INFO_YY] - infoValue[INFO_XY] * infoValue[INFO_XY];
float trace = infoValue[INFO_XX] + infoValue[INFO_YY];
float temp = sqrt(trace * trace - 4 * det);
infoValue[ INFO_HIGH ] = 0.5 * (trace + temp);
infoValue[ INFO_LOW ] = 0.5 * (trace - temp);
if (infoValue[ INFO_HIGH ] < infoValue[ INFO_LOW ]) {
float a = infoValue[ INFO_HIGH ];
infoValue[ INFO_HIGH ] = infoValue[ INFO_LOW ];
infoValue[ INFO_LOW ] = a;
}
// dbgPlugins << vitinfoDeviceRect.x() <<"" << vitinfoDeviceRect.y() <<"" << infoValue[INFO_XX] <<"" << infoValue[INFO_YY] <<"" << infoValue[INFO_XY] <<"" << infoValue[INFO_HIGH] <<"" << infoValue[INFO_LOW] <<"" << trace <<"" << temp <<"" << det;
}
}
HarrisPoints zones(5, 5, rect.width(), rect.height(), FEATURES_QUANTITY);
// Detect Harris Points
{
int margin = 8;
KisHLineIterator hitinfoDevice = infoDevice-> createHLineIterator(margin, margin, rect.width() - 2 * margin);
for (int y = margin + rect.top(); y < rect.bottom() - margin; y++) {
for (int x = margin + rect.left(); x < rect.right() - margin; x++, ++hitinfoDevice) {
float* infoValue = reinterpret_cast<float*>(hitinfoDevice.rawData());
float low = infoValue[ INFO_LOW ];
// dbgPlugins << low;
if (low > THRESHOLD_LAMBDA) {
KisRectIteratorPixel vitinfoDeviceRect = infoDevice->createRectIterator(x - 1, y - 1, 3, 3);
bool greater = true;
for (;!vitinfoDeviceRect.isDone(); ++vitinfoDeviceRect) {
if (reinterpret_cast<float*>(vitinfoDeviceRect.rawData())[ INFO_LOW ] > low) {
示例4: cubism
void KisCubismFilter::cubism(KisPaintDeviceSP src,
const QPoint& srcTopLeft,
KisPaintDeviceSP dst,
const QPoint& dstTopLeft,
const QSize& size,
quint32 tileSize,
quint32 tileSaturation) const
{
Q_ASSERT(src);
Q_ASSERT(dst);
//fill the destination image with the background color (black for now)
KisRectIteratorPixel dstIt = dst->createRectIterator(dstTopLeft.x(), dstTopLeft.y(), size.width(), size.height());
qint32 depth = src->colorSpace()->colorChannelCount();
while (! dstIt.isDone()) {
for (qint32 i = 0; i < depth; i++) {
dstIt.rawData()[i] = 0;
}
++dstIt;
}
//compute number of rows and columns
qint32 cols = (size.width() + tileSize - 1) / tileSize;
qint32 rows = (size.height() + tileSize - 1) / tileSize;
qint32 numTiles = (rows + 1) * (cols + 1);
// setProgressTotalSteps(numTiles);
// setProgressStage(i18n("Applying cubism filter..."),0);
qint32* randomIndices = new qint32[numTiles];
for (qint32 i = 0; i < numTiles; i++) {
randomIndices[i] = i;
}
randomizeIndices(numTiles, randomIndices);
qint32 count = 0;
qint32 i, j, ix, iy;
double x, y, width, height, theta;
KisPolygon *poly = new KisPolygon();
qint32 pixelSize = src->pixelSize();
const quint8 *srcPixel /*= new quint8[ pixelSize ]*/;
quint8 *dstPixel = 0;
KisRandomAccessor srcAccessor = src->createRandomAccessor(0, 0);
while (count < numTiles) {
i = randomIndices[count] / (cols + 1);
j = randomIndices[count] % (cols + 1);
x = j * tileSize + (tileSize / 4.0) - randomDoubleNumber(0, tileSize / 2.0) + dstTopLeft.x();
y = i * tileSize + (tileSize / 4.0) - randomDoubleNumber(0, tileSize / 2.0) + dstTopLeft.y();
width = (tileSize + randomDoubleNumber(0, tileSize / 4.0) - tileSize / 8.0) * tileSaturation;
height = (tileSize + randomDoubleNumber(0, tileSize / 4.0) - tileSize / 8.0) * tileSaturation;
theta = randomDoubleNumber(0, 2 * M_PI);
poly->clear();
poly->addPoint(-width / 2.0, -height / 2.0);
poly->addPoint(width / 2.0, -height / 2.0);
poly->addPoint(width / 2.0, height / 2.0);
poly->addPoint(-width / 2.0, height / 2.0);
poly->rotate(theta);
poly->translate(x, y);
// bounds check on x, y
ix = (qint32) CLAMP(x, dstTopLeft.x(), dstTopLeft.x() + size.width() - 1);
iy = (qint32) CLAMP(y, dstTopLeft.y(), dstTopLeft.y() + size.height() - 1);
//read the pixel at ix, iy
srcAccessor.moveTo(ix, iy);
srcPixel = srcAccessor.rawData();
if (srcPixel[pixelSize - 1]) {
fillPolyColor(src, srcTopLeft, dst, dstTopLeft, size, poly, srcPixel, dstPixel);
}
count++;
// if ((count % 5) == 0) setProgress(count);
}
}