本文整理汇总了C++中DImg::width方法的典型用法代码示例。如果您正苦于以下问题:C++ DImg::width方法的具体用法?C++ DImg::width怎么用?C++ DImg::width使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DImg
的用法示例。
在下文中一共展示了DImg::width方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: transform
void IccTransform::transform(DImg& image, const TransformDescription& description, DImgLoaderObserver* const observer)
{
const int bytesDepth = image.bytesDepth();
const int pixels = image.width() * image.height();
// convert ten scanlines in a batch
const int pixelsPerStep = image.width() * 10;
uchar* data = image.bits();
// see dimgloader.cpp, granularity().
int granularity = 1;
if (observer)
{
granularity = (int)((pixels / (20 * 0.9)) / observer->granularity());
}
int checkPoint = pixels;
// it is safe to use the same input and output buffer if the format is the same
if (description.inputFormat == description.outputFormat)
{
for (int p = pixels; p > 0; p -= pixelsPerStep)
{
int pixelsThisStep = qMin(p, pixelsPerStep);
int size = pixelsThisStep * bytesDepth;
LcmsLock lock;
dkCmsDoTransform(d->handle, data, data, pixelsThisStep);
data += size;
if (observer && p <= checkPoint)
{
checkPoint -= granularity;
observer->progressInfo(&image, 0.1 + 0.9 * (1.0 - float(p) / float(pixels)));
}
}
}
else
{
QVarLengthArray<uchar> buffer(pixelsPerStep * bytesDepth);
for (int p = pixels; p > 0; p -= pixelsPerStep)
{
int pixelsThisStep = qMin(p, pixelsPerStep);
int size = pixelsThisStep * bytesDepth;
LcmsLock lock;
memcpy(buffer.data(), data, size);
dkCmsDoTransform(d->handle, buffer.data(), data, pixelsThisStep);
data += size;
if (observer && p <= checkPoint)
{
checkPoint -= granularity;
observer->progressInfo(&image, 0.1 + 0.9 * (1.0 - float(p) / float(pixels)));
}
}
}
}
示例2: pattern
void BorderFilter::pattern(DImg& src, DImg& dest, int borderWidth,
const DColor& firstColor, const DColor& secondColor,
int firstWidth, int secondWidth)
{
// Original image with the first solid border around.
DImg tmp;
solid(src, tmp, firstColor, firstWidth);
// Border tiled image using pattern with second solid border around.
int width, height;
if (d->settings.orgWidth > d->settings.orgHeight)
{
height = tmp.height() + borderWidth * 2;
width = (int)(height * d->orgRatio);
}
else
{
width = tmp.width() + borderWidth * 2;
height = (int)(width / d->orgRatio);
}
DImg tmp2(width, height, tmp.sixteenBit(), tmp.hasAlpha());
qCDebug(DIGIKAM_DIMG_LOG) << "Border File:" << d->settings.borderPath;
DImg border(d->settings.borderPath);
if (border.isNull())
{
return;
}
border.convertToDepthOfImage(&tmp2);
for (int x = 0 ; x < width ; x += border.width())
{
for (int y = 0 ; y < height ; y += border.height())
{
tmp2.bitBltImage(&border, x, y);
}
}
solid(tmp2, dest, secondColor, secondWidth);
// Merge both images to one.
if (d->settings.orgWidth > d->settings.orgHeight)
{
dest.bitBltImage(&tmp, (dest.width() - tmp.width()) / 2, borderWidth);
}
else
{
dest.bitBltImage(&tmp, borderWidth, (dest.height() - tmp.height()) / 2);
}
}
示例3: DImg
void BorderFilter::solid2(DImg& src, DImg& dest, const DColor& fg, int borderWidth)
{
dest = DImg(src.width() + borderWidth * 2, src.height() + borderWidth * 2,
src.sixteenBit(), src.hasAlpha());
dest.fill(fg);
dest.bitBltImage(&src, borderWidth, borderWidth);
}
示例4: preparePreview
void LensAutoFixTool::preparePreview()
{
// Settings information must be get before to disable settings view.
LensFunContainer settings = d->cameraSelector->settings();
d->settingsView->assignFilterSettings(settings);
ImageIface* const iface = d->previewWidget->imageIface();
DImg preview = iface->preview();
if (d->showGrid->isChecked())
{
QBitmap pattern(9, 9);
pattern.clear();
QPainter p1(&pattern);
p1.setPen(QPen(Qt::black, 1));
p1.drawLine(5, 0, 5, 9);
p1.drawLine(0, 5, 9, 5);
p1.end();
QPixmap pix(preview.size());
pix.fill(Qt::transparent);
QPainter p2(&pix);
p2.setPen(QPen(Qt::gray, 1));
p2.fillRect(0, 0, pix.width(), pix.height(), QBrush(pattern));
p2.end();
DImg grid(pix.toImage());
DColorComposer* const composer = DColorComposer::getComposer(DColorComposer::PorterDuffNone);
DColorComposer::MultiplicationFlags flags = DColorComposer::NoMultiplication;
// Do alpha blending of template on dest image
preview.bitBlendImage(composer, &grid, 0, 0, preview.width(), preview.height(), 0, 0, flags);
}
setFilter(new LensFunFilter(&preview, this, settings));
}
示例5: prepareEffect
void ContentAwareResizeTool::prepareEffect()
{
if (d->prevW != d->wInput->value() || d->prevH != d->hInput->value() ||
d->prevWP != d->wpInput->value() || d->prevHP != d->hpInput->value())
{
slotValuesChanged();
}
disableSettings();
ImageIface* iface = d->previewWidget->imageIface();
int w = iface->previewWidth();
int h = iface->previewHeight();
DImg imTemp = iface->getOriginalImg()->smoothScale(w, h, Qt::KeepAspectRatio);
int new_w = (int)(w*d->wpInput->value()/100.0);
int new_h = (int)(h*d->hpInput->value()/100.0);
if (d->mixedRescaleInput->value()<100.0) // mixed rescale
{
double stdRescaleP = (100.0 - d->mixedRescaleInput->value()) / 100.0;
int diff_w = (int)(stdRescaleP * (w - new_w));
int diff_h = (int)(stdRescaleP * (h - new_h));
imTemp.resize(imTemp.width() - diff_w, imTemp.height() - diff_h);
}
QImage mask;
if (d->weightMaskBox->isChecked())
{
mask = d->previewWidget->getMask();
}
contentAwareResizeCore(&imTemp, new_w, new_h, mask);
}
示例6: setPreviewImage
void ShearTool::setPreviewImage()
{
ImageIface* const iface = d->previewWidget->imageIface();
int w = iface->previewSize().width();
int h = iface->previewSize().height();
DImg imTemp = filter()->getTargetImage().smoothScale(w, h, Qt::KeepAspectRatio);
DImg imDest( w, h, filter()->getTargetImage().sixteenBit(), filter()->getTargetImage().hasAlpha() );
imDest.fill( DColor(d->previewWidget->palette().color(QPalette::Background).rgb(),
filter()->getTargetImage().sixteenBit()) );
imDest.bitBltImage(&imTemp, (w-imTemp.width())/2, (h-imTemp.height())/2);
iface->setPreview(imDest.smoothScale(iface->previewSize()));
d->previewWidget->updatePreview();
ShearFilter* const tool = dynamic_cast<ShearFilter*>(filter());
if (tool)
{
QSize newSize = tool->getNewSize();
QString temp;
d->newWidthLabel->setText(temp.setNum( newSize.width()) + i18n(" px") );
d->newHeightLabel->setText(temp.setNum( newSize.height()) + i18n(" px") );
}
}
示例7: putData
bool UndoCache::putData(int level, const DImg& img) const
{
QFile file(d->cacheFile(level));
KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(d->cacheDir);
unsigned long fspace = (unsigned long)(info.available()/1024.0/1024.0);
kDebug() << "Free space available in Editor cache [" << d->cacheDir << "] in Mbytes: " << fspace;
if (file.exists() ||
!file.open(QIODevice::WriteOnly) ||
fspace < 1024) // Check if free space is over 1 Gb to put data in cache.
{
return false;
}
QDataStream ds(&file);
ds << img.width();
ds << img.height();
ds << img.sixteenBit();
ds << img.hasAlpha();
QByteArray ba((const char*)img.bits(), img.numBytes());
ds << ba;
file.close();
d->cachedLevels << level;
return true;
}
示例8: getSnapshot
void UndoManager::getSnapshot(int index, DImg* const img) const
{
DImg data = d->undoCache->getData(index);
// Pass ownership of buffer. If data is null, img will be null
img->putImageData(data.width(), data.height(), data.sixteenBit(), data.hasAlpha(), data.bits(), true);
}
示例9: solid
void BorderFilter::solid(DImg& src, DImg& dest, const DColor& fg, int borderWidth)
{
if (d->settings.orgWidth > d->settings.orgHeight)
{
int height = src.height() + borderWidth * 2;
dest = DImg((int)(height * d->orgRatio), height, src.sixteenBit(), src.hasAlpha());
dest.fill(fg);
dest.bitBltImage(&src, (dest.width() - src.width()) / 2, borderWidth);
}
else
{
int width = src.width() + borderWidth * 2;
dest = DImg(width, (int)(width / d->orgRatio), src.sixteenBit(), src.hasAlpha());
dest.fill(fg);
dest.bitBltImage(&src, borderWidth, (dest.height() - src.height()) / 2);
}
}
示例10: applyBCG
void BCGFilter::applyBCG(DImg& image)
{
if (image.isNull())
{
return;
}
applyBCG(image.bits(), image.width(), image.height(), image.sixteenBit());
}
示例11: putFinalData
void ResizeTool::putFinalData()
{
ImageIface iface(0, 0);
DImg targetImage = filter()->getTargetImage();
iface.putOriginalImage(i18n("Resize"),
filter()->filterAction(),
targetImage.bits(),
targetImage.width(), targetImage.height());
}
示例12: setPreviewImage
void RawImport::setPreviewImage()
{
// Preserve metadata from loaded image, and take post-processed image data
d->postProcessedImage = d->previewWidget->demosaicedImage().copyMetaData();
DImg data = filter()->getTargetImage();
d->postProcessedImage.putImageData(data.width(), data.height(), data.sixteenBit(), data.hasAlpha(),
data.stripImageData(), false);
d->previewWidget->setPostProcessedImage(d->postProcessedImage);
d->settingsBox->setPostProcessedImage(d->postProcessedImage);
EditorToolIface::editorToolIface()->setToolStopProgress();
setBusy(false);
}
示例13: sz
uchar* ImageIface::Private::previewImageData()
{
if (previewImage.isNull())
{
DImg* im = 0;
if (previewType == FullImage)
{
im = core->getImg();
if (!im || im->isNull())
{
return 0;
}
}
else // ImageSelection
{
im = new DImg(core->getImgSelection());
if (!im)
{
return 0;
}
if (im->isNull())
{
delete im;
return 0;
}
im->setIccProfile(core->getEmbeddedICC());
}
QSize sz(im->width(), im->height());
sz.scale(constrainWidth, constrainHeight, Qt::KeepAspectRatio);
previewImage = im->smoothScale(sz.width(), sz.height());
previewWidth = previewImage.width();
previewHeight = previewImage.height();
// only create another copy if needed, in setPreviewImage
targetPreviewImage = previewImage;
if (previewType == ImageSelection)
{
delete im;
}
}
DImg previewData = previewImage.copyImageData();
return previewData.stripImageData();
}
示例14: putPreviewData
void ResizeTool::putPreviewData()
{
ImageIface* iface = d->previewWidget->imageIface();
int w = iface->previewWidth();
int h = iface->previewHeight();
DImg imTemp = filter()->getTargetImage().smoothScale(w, h, Qt::KeepAspectRatio);
DImg imDest(w, h, filter()->getTargetImage().sixteenBit(), filter()->getTargetImage().hasAlpha());
QColor background = toolView()->backgroundRole();
imDest.fill(DColor(background, filter()->getTargetImage().sixteenBit()));
imDest.bitBltImage(&imTemp, (w-imTemp.width())/2, (h-imTemp.height())/2);
iface->putPreviewImage((imDest.smoothScale(iface->previewWidth(), iface->previewHeight())).bits());
d->previewWidget->updatePreview();
}
示例15: border
void BorderFilter::pattern2(DImg& src, DImg& dest, int borderWidth,
const DColor& firstColor, const DColor& secondColor,
int firstWidth, int secondWidth)
{
// Border tile.
int w = d->settings.orgWidth + borderWidth * 2;
int h = d->settings.orgHeight + borderWidth * 2;
qCDebug(DIGIKAM_DIMG_LOG) << "Border File:" << d->settings.borderPath;
DImg border(d->settings.borderPath);
if (border.isNull())
{
return;
}
DImg borderImg(w, h, src.sixteenBit(), src.hasAlpha());
border.convertToDepthOfImage(&borderImg);
for (int x = 0 ; x < w ; x += border.width())
{
for (int y = 0 ; y < h ; y += border.height())
{
borderImg.bitBltImage(&border, x, y);
}
}
// First line around the pattern tile.
DImg tmp = borderImg.smoothScale(src.width() + borderWidth * 2,
src.height() + borderWidth * 2);
solid2(tmp, dest, firstColor, firstWidth);
// Second line around original image.
tmp.reset();
solid2(src, tmp, secondColor, secondWidth);
// Copy original image.
dest.bitBltImage(&tmp, borderWidth, borderWidth);
}