本文整理汇总了C++中scaledSize函数的典型用法代码示例。如果您正苦于以下问题:C++ scaledSize函数的具体用法?C++ scaledSize怎么用?C++ scaledSize使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了scaledSize函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: readColorProfile
void WEBPImageDecoder::applyColorProfile(const uint8_t* data, size_t size, ImageFrame& buffer)
{
int width;
int decodedHeight;
if (!WebPIDecGetRGB(m_decoder, &decodedHeight, &width, 0, 0))
return; // See also https://bugs.webkit.org/show_bug.cgi?id=74062
if (decodedHeight <= 0)
return;
if (!m_haveReadProfile) {
readColorProfile(data, size);
m_haveReadProfile = true;
}
ASSERT(width == scaledSize().width());
ASSERT(decodedHeight <= scaledSize().height());
for (int y = m_decodedHeight; y < decodedHeight; ++y) {
uint8_t* row = reinterpret_cast<uint8_t*>(buffer.getAddr(0, y));
if (qcms_transform* transform = colorTransform())
qcms_transform_data_type(transform, row, row, width, QCMS_OUTPUT_RGBX);
uint8_t* pixel = row;
for (int x = 0; x < width; ++x, pixel += 4)
buffer.setRGBA(x, y, pixel[0], pixel[1], pixel[2], pixel[3]);
}
m_decodedHeight = decodedHeight;
}
示例2: outputScanlines
bool JPEGImageDecoder::outputScanlines()
{
if (m_frameBufferCache.isEmpty())
return false;
// Initialize the framebuffer if needed.
RGBA32Buffer& buffer = m_frameBufferCache[0];
if (buffer.status() == RGBA32Buffer::FrameEmpty) {
if (!buffer.setSize(scaledSize().width(), scaledSize().height()))
return setFailed();
buffer.setStatus(RGBA32Buffer::FramePartial);
buffer.setHasAlpha(false);
buffer.setColorProfile(m_colorProfile);
// For JPEGs, the frame always fills the entire image.
buffer.setRect(IntRect(IntPoint(), size()));
}
jpeg_decompress_struct* info = m_reader->info();
JSAMPARRAY samples = m_reader->samples();
while (info->output_scanline < info->output_height) {
// jpeg_read_scanlines will increase the scanline counter, so we
// save the scanline before calling it.
int sourceY = info->output_scanline;
/* Request one scanline. Returns 0 or 1 scanlines. */
if (jpeg_read_scanlines(info, samples, 1) != 1)
return false;
int destY = scaledY(sourceY);
if (destY < 0)
continue;
int width = m_scaled ? m_scaledColumns.size() : info->output_width;
for (int x = 0; x < width; ++x) {
JSAMPLE* jsample = *samples + (m_scaled ? m_scaledColumns[x] : x) * ((info->out_color_space == JCS_RGB) ? 3 : 4);
if (info->out_color_space == JCS_RGB)
buffer.setRGBA(x, destY, jsample[0], jsample[1], jsample[2], 0xFF);
else if (info->out_color_space == JCS_CMYK) {
// Source is 'Inverted CMYK', output is RGB.
// See: http://www.easyrgb.com/math.php?MATH=M12#text12
// Or: http://www.ilkeratalay.com/colorspacesfaq.php#rgb
// From CMYK to CMY:
// X = X * (1 - K ) + K [for X = C, M, or Y]
// Thus, from Inverted CMYK to CMY is:
// X = (1-iX) * (1 - (1-iK)) + (1-iK) => 1 - iX*iK
// From CMY (0..1) to RGB (0..1):
// R = 1 - C => 1 - (1 - iC*iK) => iC*iK [G and B similar]
unsigned k = jsample[3];
buffer.setRGBA(x, destY, jsample[0] * k / 255, jsample[1] * k / 255, jsample[2] * k / 255, 0xFF);
} else {
ASSERT_NOT_REACHED();
return setFailed();
}
}
}
return true;
}
示例3: ir
QImage NemoThumbnailProvider::generateThumbnail(const QString &id, const QByteArray &hashData, const QSize &requestedSize, bool crop)
{
QImage img;
QSize originalSize;
QByteArray format;
// image was not in cache thus we read it
QImageReader ir(id);
if (!ir.canRead())
return img;
originalSize = ir.size();
format = ir.format();
if (originalSize != requestedSize && originalSize.isValid()) {
if (crop) {
// scales arbitrary sized source image to requested size scaling either up or down
// keeping aspect ratio of the original image intact by maximizing either width or height
// and cropping the rest of the image away
QSize scaledSize(originalSize);
// now scale it filling the original rectangle by keeping aspect ratio, but expand if needed.
scaledSize.scale(requestedSize, Qt::KeepAspectRatioByExpanding);
// set the adjusted clipping rectangle in the center of the scaled image
QPoint center((scaledSize.width() - 1) / 2, (scaledSize.height() - 1) / 2);
QRect cr(0,0,requestedSize.width(), requestedSize.height());
cr.moveCenter(center);
ir.setScaledClipRect(cr);
// set requested target size of a thumbnail
ir.setScaledSize(scaledSize);
} else {
// Maintains correct aspect ratio without cropping, as such the final image may
// be smaller than requested in one dimension.
QSize scaledSize(originalSize);
scaledSize.scale(requestedSize, Qt::KeepAspectRatio);
ir.setScaledSize(scaledSize);
}
}
img = ir.read();
NemoImageMetadata meta(id, format);
if (meta.orientation() != NemoImageMetadata::TopLeft)
img = rotate(img, meta.orientation());
// write the scaled image to cache
if (meta.orientation() != NemoImageMetadata::TopLeft ||
(originalSize != requestedSize && originalSize.isValid())) {
writeCacheFile(hashData, img);
}
TDEBUG() << Q_FUNC_INFO << "Wrote " << id << " to cache";
return img;
}
示例4: outputScanlines
bool JPEGImageDecoder::outputScanlines()
{
if (m_frameBufferCache.isEmpty())
return false;
// Initialize the framebuffer if needed.
ImageFrame& buffer = m_frameBufferCache[0];
if (buffer.status() == ImageFrame::FrameEmpty) {
if (!buffer.setSize(scaledSize().width(), scaledSize().height()))
return setFailed();
buffer.setStatus(ImageFrame::FramePartial);
// The buffer is transparent outside the decoded area while the image is
// loading. The completed image will be marked fully opaque in jpegComplete().
buffer.setHasAlpha(true);
buffer.setColorProfile(m_colorProfile);
// For JPEGs, the frame always fills the entire image.
buffer.setOriginalFrameRect(IntRect(IntPoint(), size()));
}
jpeg_decompress_struct* info = m_reader->info();
#if defined(TURBO_JPEG_RGB_SWIZZLE)
if (!m_scaled && turboSwizzled(info->out_color_space)) {
while (info->output_scanline < info->output_height) {
unsigned char* row = reinterpret_cast<unsigned char*>(buffer.getAddr(0, info->output_scanline));
if (jpeg_read_scanlines(info, &row, 1) != 1)
return false;
#if USE(QCMSLIB)
if (qcms_transform* transform = m_reader->colorTransform())
qcms_transform_data_type(transform, row, row, info->output_width, rgbOutputColorSpace() == JCS_EXT_BGRA ? QCMS_OUTPUT_BGRX : QCMS_OUTPUT_RGBX);
#endif
}
return true;
}
#endif
switch (info->out_color_space) {
// The code inside outputScanlines<int, bool> will be executed
// for each pixel, so we want to avoid any extra comparisons there.
// That is why we use template and template specializations here so
// the proper code will be generated at compile time.
case JCS_RGB:
return outputScanlines<JCS_RGB>(buffer);
case JCS_CMYK:
return outputScanlines<JCS_CMYK>(buffer);
default:
ASSERT_NOT_REACHED();
}
return setFailed();
}
示例5: qMax
QSize mutableSquareImageContainer::setScaledHeight(int heightHint) {
if (scaledSize().isEmpty()) {
const int newSquareSize = qMax(heightHint/heightSquareCount_, 2);
const int newWidth = newSquareSize * widthSquareCount_;
const int newHeight = newSquareSize * heightSquareCount_;
const QSize newSize(newWidth, newHeight);
imageContainer::setScaledSize(newSize);
return newSize;
}
else {
return scaledSize();
}
}
示例6: scaledSize
void QGLTextureCubePrivate::bindImages(QGLTexture2DTextureInfo *info)
{
QSize scaledSize(size);
#if defined(QT_OPENGL_ES_2)
if ((bindOptions & QGLTexture2D::MipmapBindOption) ||
horizontalWrap != QGL::ClampToEdge ||
verticalWrap != QGL::ClampToEdge) {
// ES 2.0 does not support NPOT textures when mipmaps are in use,
// or if the wrap mode isn't ClampToEdge.
scaledSize = QGL::nextPowerOfTwo(scaledSize);
}
#endif
// Handle the first face.
if (!image.isNull())
info->tex.uploadFace(GL_TEXTURE_CUBE_MAP_POSITIVE_X, image, scaledSize);
else if (size.isValid())
info->tex.createFace(GL_TEXTURE_CUBE_MAP_POSITIVE_X, scaledSize);
// Handle the other faces.
for (int face = 1; face < 6; ++face) {
if (!otherImages[face - 1].isNull()) {
info->tex.uploadFace(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face,
otherImages[face - 1], scaledSize);
} else {
info->tex.createFace(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, scaledSize);
}
}
}
示例7: scaledSize
FloatSize VisualViewport::visibleSize() const
{
FloatSize scaledSize(m_size);
scaledSize.expand(0, m_topControlsAdjustment);
scaledSize.scale(1 / m_scale);
return scaledSize;
}
示例8: colors
QImage mutableSquareImageContainer::scaledImage() const {
QHash<triC, QImage> colorSquares;
const QVector<triC>& squareColors = colors();
const int curDimension = scaledDimension();
const grid baseImage(image(), originalDimension_);
QImage squareImage(curDimension, curDimension, QImage::Format_RGB32);
for (int i = 0, size = squareColors.size(); i < size; ++i) {
const triC& thisImageColor = squareColors[i];
squareImage.fill(thisImageColor.qrgb());
colorSquares[thisImageColor] = squareImage;
}
QImage returnImage(scaledSize(), QImage::Format_RGB32);
QPainter painter(&returnImage);
for (int yBox = 0; yBox < heightSquareCount_; ++yBox) {
for (int xBox = 0; xBox < widthSquareCount_; ++xBox) {
const triC& thisSquareColor =
baseImage(xBox*originalDimension_, yBox*originalDimension_);
painter.drawImage(QPoint(xBox*curDimension, yBox*curDimension),
colorSquares[thisSquareColor]);
}
}
return returnImage;
}
示例9: setScaledWidth
QSize mutableSquareImageContainer::setScaledSize(const QSize& sizeHint) {
if (sizeHint.isEmpty()) {
imageContainer::setScaledSize(sizeHint);
return sizeHint;
}
// adjust sizeHint (smaller) to make the dimensions multiples of a
// square size
// yup - we ignore the sizeHint height
if (scaledSize().isEmpty()) {
return setScaledWidth(sizeHint.width());
}
else {
return scaledSize();
}
}
示例10: scaledSize
Size GeomUtils::outsideSize(Node* node) {
const Size& size = scaledSize(node);
float r = node->getRotation() * M_PI / 180.0f;
float c = fabsf(cosf(r));
float s = fabsf(sinf(r));
return Size(c * size.width + s * size.height,
s * size.width + c * size.height);
}
示例11: startAnimation
void BitmapImage::draw(GraphicsContext* context, const FloatRect& dst, const FloatRect& src, ColorSpace styleColorSpace, CompositeOperator op,
BlendMode, RespectImageOrientationEnum shouldRespectImageOrientation)
{
if (!dst.width() || !dst.height() || !src.width() || !src.height())
return;
startAnimation();
NativeImageCairo* nativeImage = frameAtIndex(m_currentFrame);
if (!nativeImage) // If it's too early we won't have an image yet.
return;
if (mayFillWithSolidColor()) {
fillWithSolidColor(context, dst, solidColor(), styleColorSpace, op);
return;
}
context->save();
// Set the compositing operation.
if (op == CompositeSourceOver && !frameHasAlphaAtIndex(m_currentFrame))
context->setCompositeOperation(CompositeCopy);
else
context->setCompositeOperation(op);
#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
cairo_surface_t* surface = nativeImage->surface();
IntSize scaledSize(cairo_image_surface_get_width(surface), cairo_image_surface_get_height(surface));
FloatRect adjustedSrcRect = adjustSourceRectForDownSampling(src, scaledSize);
#else
FloatRect adjustedSrcRect(src);
#endif
ImageOrientation orientation = DefaultImageOrientation;
if (shouldRespectImageOrientation == RespectImageOrientation)
orientation = frameOrientationAtIndex(m_currentFrame);
FloatRect dstRect = dst;
if (orientation != DefaultImageOrientation) {
// ImageOrientation expects the origin to be at (0, 0).
context->translate(dstRect.x(), dstRect.y());
dstRect.setLocation(FloatPoint());
context->concatCTM(orientation.transformFromDefault(dstRect.size()));
if (orientation.usesWidthAsHeight()) {
// The destination rectangle will have it's width and height already reversed for the orientation of
// the image, as it was needed for page layout, so we need to reverse it back here.
dstRect = FloatRect(dstRect.x(), dstRect.y(), dstRect.height(), dstRect.width());
}
}
context->platformContext()->drawSurfaceToContext(nativeImage->surface(), dstRect, adjustedSrcRect, context);
context->restore();
if (imageObserver())
imageObserver()->didDraw(this);
}
示例12: nativeImageForCurrentFrame
void Image::drawPattern(GraphicsContext* ctxt, const FloatRect& tileRect, const AffineTransform& patternTransform,
const FloatPoint& phase, ColorSpace, CompositeOperator op, const FloatRect& destRect)
{
QPixmap* framePixmap = nativeImageForCurrentFrame();
if (!framePixmap) // If it's too early we won't have an image yet.
return;
// Qt interprets 0 width/height as full width/height so just short circuit.
QRectF dr = QRectF(destRect).normalized();
QRect tr = QRectF(tileRect).toRect().normalized();
if (!dr.width() || !dr.height() || !tr.width() || !tr.height())
return;
QPixmap pixmap = *framePixmap;
if (tr.x() || tr.y() || tr.width() != pixmap.width() || tr.height() != pixmap.height())
pixmap = pixmap.copy(tr);
CompositeOperator previousOperator = ctxt->compositeOperation();
ctxt->setCompositeOperation(!pixmap.hasAlpha() && op == CompositeSourceOver ? CompositeCopy : op);
QPainter* p = ctxt->platformContext();
QTransform transform(patternTransform);
// If this would draw more than one scaled tile, we scale the pixmap first and then use the result to draw.
if (transform.type() == QTransform::TxScale) {
QRectF tileRectInTargetCoords = (transform * QTransform().translate(phase.x(), phase.y())).mapRect(tr);
bool tileWillBePaintedOnlyOnce = tileRectInTargetCoords.contains(dr);
if (!tileWillBePaintedOnlyOnce) {
QSizeF scaledSize(float(pixmap.width()) * transform.m11(), float(pixmap.height()) * transform.m22());
QPixmap scaledPixmap(scaledSize.toSize());
if (pixmap.hasAlpha())
scaledPixmap.fill(Qt::transparent);
{
QPainter painter(&scaledPixmap);
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.setRenderHints(p->renderHints());
painter.drawPixmap(QRect(0, 0, scaledPixmap.width(), scaledPixmap.height()), pixmap);
}
pixmap = scaledPixmap;
transform = QTransform::fromTranslate(transform.dx(), transform.dy());
}
}
/* Translate the coordinates as phase is not in world matrix coordinate space but the tile rect origin is. */
transform *= QTransform().translate(phase.x(), phase.y());
transform.translate(tr.x(), tr.y());
QBrush b(pixmap);
b.setTransform(transform);
p->fillRect(dr, b);
ctxt->setCompositeOperation(previousOperator);
if (imageObserver())
imageObserver()->didDraw(this);
}
示例13: scaledSize
PassRefPtr<Uint8ClampedArray> FilterEffect::asPremultipliedImage(const IntRect& rect)
{
IntSize scaledSize(rect.size());
ASSERT(!ImageBuffer::sizeNeedsClamping(scaledSize));
scaledSize.scale(m_filter.filterScale());
RefPtr<Uint8ClampedArray> imageData = Uint8ClampedArray::createUninitialized(scaledSize.width() * scaledSize.height() * 4);
copyPremultipliedImage(imageData.get(), rect);
return imageData.release();
}
示例14: ASSERT
PassRefPtr<Uint8ClampedArray> FilterEffect::asPremultipliedImage(const IntRect& rect)
{
ASSERT(isFilterSizeValid(rect));
IntSize scaledSize(rect.size());
scaledSize.scale(m_filter->filterScale());
RefPtr<Uint8ClampedArray> imageData = Uint8ClampedArray::createUninitialized(scaledSize.width() * scaledSize.height() * 4);
copyPremultipliedImage(imageData.get(), rect);
return imageData.release();
}
示例15: scaledSize
bool AcceleratedSurface::resize(const IntSize& size)
{
IntSize scaledSize(size);
scaledSize.scale(m_webPage.deviceScaleFactor());
if (scaledSize == m_size)
return false;
m_size = scaledSize;
return true;
}