//ONLY USED IF USING DESCRIPTORS SpriteSheetDescription Resources::loadDescription(std::string fileName) { std::string filePath = TEXTURETPATH + fileName + TEXTUREDESCRIPTIONEXTENSION; SpriteSheetDescription ret; // leer el fichero std::ifstream file(filePath); if (!file.is_open()) { std::cout << "Error opening file on resources loadDescription " << filePath << std::endl; exit(EXIT_FAILURE); } std::vector<std::pair<int, std::string> > v; int lineNum = 0; std::string line; while (getline(file,line)) { ++lineNum; for (int i = 0; i < int(line.size()-1); ++i) { if (line[i] == '/' && line[i+1] == '/') { line = line.substr(0,i); break; } } std::istringstream aux(line); std::string s; while(aux >> s) v.push_back(std::make_pair(lineNum,s)); } SpriteSheetDescription ssd; std::map<std::string, int> positions; for (int i = 0; i < int(v.size()); ++i) { lineNum = v[i].first; std::string key = v[i].second; int descriptorPosition; if (positions.find(key) == positions.end()) { descriptorPosition = positions.size(); positions.insert(std::make_pair(key,descriptorPosition)); ssd.push_back(std::vector<sf::IntRect>()); } else { descriptorPosition = positions[key]; } //std::cout << "insertando la key " << key << " en la posicion " << descriptorPosition << std::endl; if (i+4 >= int(v.size()) || !isInt(v[i+1].second) || !isInt(v[i+2].second) || !isInt(v[i+3].second) || !isInt(v[i+4].second)) { std::cout << "Error in line " << lineNum << ": four integers are needed" << std::endl; exit(EXIT_FAILURE); } sf::IntRect intRect(myStoi(v[i+1].second), myStoi(v[i+2].second), myStoi(v[i+3].second), myStoi(v[i+4].second)); ssd[descriptorPosition].push_back(intRect); i += 4; } return ssd; }
void RectLandmark::draw(Mat& image, const Scalar& color, float width) const { if (isVisible()) { Rect_<float> floatRect = getRect(); Rect intRect( Point(cvRound(floatRect.tl().x), cvRound(floatRect.tl().y)), Point(cvRound(floatRect.br().x), cvRound(floatRect.br().y))); cv::rectangle(image, intRect, color, width); } }
void WebFont::drawText(WebCanvas* canvas, const WebTextRun& run, const WebFloatPoint& leftBaseline, WebColor color, const WebRect& clip) const { FontCachePurgePreventer fontCachePurgePreventer; FloatRect textClipRect(clip); TextRun textRun(run); TextRunPaintInfo runInfo(textRun); runInfo.bounds = textClipRect; IntRect intRect(clip); SkPictureBuilder pictureBuilder(intRect); GraphicsContext& context = pictureBuilder.context(); { DrawingRecorder drawingRecorder(context, pictureBuilder, DisplayItem::WebFont, intRect); context.save(); context.setFillColor(color); context.clip(textClipRect); context.drawText(m_private->getFont(), runInfo, leftBaseline); context.restore(); } pictureBuilder.endRecording()->playback(canvas); }
// ------------------------------------------------------------------------- void ctkQImageView::update( bool zoomChanged, bool sizeChanged ) { Q_D( ctkQImageView ); if( d->SliceNumber >= 0 && d->SliceNumber < d->ImageList.size() ) { const QImage * img = & ( d->ImageList[ d->SliceNumber ] ); if( zoomChanged || sizeChanged ) { if( this->width() > 0 && this->height() > 0 && d->TmpXMax > d->TmpXMin && d->TmpYMax > d->TmpYMin) { int tmpXRange = d->TmpXMax - d->TmpXMin; int tmpYRange = d->TmpYMax - d->TmpYMin; double tmpAspectRatio = static_cast<double>(tmpYRange) / tmpXRange; double screenAspectRatio = static_cast<double>(this->height()) / this->width(); if( screenAspectRatio > tmpAspectRatio ) { int extraTmpYAbove = d->TmpYMin; int extraTmpYBelow = img->height() - d->TmpYMax; int extraTmpYNeeded = tmpXRange * screenAspectRatio - tmpYRange; int minExtra = extraTmpYAbove; if( extraTmpYBelow < minExtra ) { minExtra = extraTmpYBelow; } if(2 * minExtra >= extraTmpYNeeded) { int minNeeded = extraTmpYNeeded / 2.0; int maxNeeded = extraTmpYNeeded - minNeeded; d->TmpYMin -= minNeeded; d->TmpYMax += maxNeeded; } else if(extraTmpYAbove + extraTmpYBelow >= extraTmpYNeeded) { if(extraTmpYAbove < extraTmpYBelow) { d->TmpYMin = 0; d->TmpYMax += extraTmpYNeeded - extraTmpYAbove; } else { d->TmpYMax = img->height(); d->TmpYMin -= extraTmpYNeeded - extraTmpYBelow; } } else { d->TmpYMin = 0; d->TmpYMax = img->height(); } d->TmpImage = QPixmap( this->width(), static_cast<unsigned int>( static_cast<double>(d->TmpYMax - d->TmpYMin) / (d->TmpXMax - d->TmpXMin) * this->width() + 0.5 ) ); } else if(screenAspectRatio < tmpAspectRatio) { int extraTmpXLeft = d->TmpXMin; int extraTmpXRight = img->width() - d->TmpXMax; int extraTmpXNeeded = static_cast<double>(tmpYRange) / screenAspectRatio - tmpXRange; int minExtra = extraTmpXLeft; if( extraTmpXRight < minExtra ) { minExtra = extraTmpXRight; } if(2 * minExtra >= extraTmpXNeeded) { int minNeeded = extraTmpXNeeded / 2.0; int maxNeeded = extraTmpXNeeded - minNeeded; d->TmpXMin -= minNeeded; d->TmpXMax += maxNeeded; } else if(extraTmpXLeft + extraTmpXRight >= extraTmpXNeeded) { if(extraTmpXLeft < extraTmpXRight) { d->TmpXMin = 0; d->TmpXMax += extraTmpXNeeded - extraTmpXLeft; } else { d->TmpXMax = img->width(); d->TmpXMin -= extraTmpXNeeded - extraTmpXRight; } } else { d->TmpXMin = 0; d->TmpXMax = img->width(); } d->TmpImage = QPixmap( static_cast<unsigned int>( this->height() / ( static_cast<double>(d->TmpYMax - d->TmpYMin) / (d->TmpXMax - d->TmpXMin) ) + 0.5 ), this->height() ); } else { d->TmpImage = QPixmap( this->width(), this->height() ); } } } if( d->TmpImage.width() > 0 && d->TmpImage.height() > 0) { QRectF target( 0, 0, d->TmpImage.width(), d->TmpImage.height() ); double sourceX = d->TmpXMin; double sourceY = d->TmpYMin; double sourceW = d->TmpXMax - d->TmpXMin; double sourceH = d->TmpYMax - d->TmpYMin; QPainter painter( &(d->TmpImage) ); QImage tmpI = *img; if( d->InvertImage ) { tmpI.invertPixels(); } if( d->FlipXAxis || d->FlipYAxis ) { tmpI = tmpI.mirrored( d->FlipXAxis, d->FlipYAxis ); if( d->FlipXAxis ) { sourceX = tmpI.width() - (d->TmpXMax - d->TmpXMin) - d->TmpXMin; } if( d->FlipYAxis ) { sourceY = tmpI.height() - (d->TmpYMax - d->TmpYMin) - d->TmpYMin; } } QRectF source( sourceX, sourceY, sourceW, sourceH ); painter.drawPixmap( target, QPixmap::fromImage( tmpI ), source ); //if( ! sizeChanged ) { int maxNumCharsPerLine = 50; int fontPointSize = 12; if( fontPointSize * maxNumCharsPerLine > this->width() ) { fontPointSize = this->width() / maxNumCharsPerLine; } if( fontPointSize > 7 ) { QString fontFamily( "Helvetica" ); QFont textFont( fontFamily, fontPointSize ); painter.setFont( textFont ); QColor textColor; textColor.setNamedColor( "lime" ); textColor.setAlpha( 128 ); painter.setPen( textColor ); int textFlags = Qt::AlignLeft | Qt::TextDontClip; QRectF pointRect( 0, 0, 1, 1 ); QRectF spaceBound = painter.boundingRect( pointRect, textFlags, "X" ); if( img->isGrayscale() ) { QString intString = "Intensity Range = "; intString.append( QString::number( d->IntensityMin, 'f', 3 ) ); intString.append( " - " ); intString.append( QString::number( d->IntensityMax, 'f', 3 ) ); QRectF intBound = painter.boundingRect( pointRect, textFlags, intString ); QRectF intRect( spaceBound.width()/2, spaceBound.height()/8, intBound.width(), intBound.height() ); painter.drawText( intRect, textFlags, intString, &intBound ); QString wlString = "W / L = "; wlString.append( QString::number( this->intensityWindow(), 'f', 3 ) ); wlString.append( " / " ); wlString.append( QString::number( this->intensityLevel(), 'f', 3 ) ); QRectF wlBound = painter.boundingRect( pointRect, textFlags, wlString ); QRectF wlRect( spaceBound.width()/2, intRect.y() + intRect.height() + spaceBound.height()/8, wlBound.width(), wlBound.height() ); painter.drawText( wlRect, textFlags, wlString, &wlBound ); } QString spacingString = "Spacing = "; spacingString.append( QString::number( this->xSpacing(), 'f', 3 ) ); spacingString.append( ", " ); spacingString.append( QString::number( this->ySpacing(), 'f', 3 ) ); spacingString.append( ", " ); spacingString.append( QString::number( this->sliceThickness(), 'f', 3 ) ); QRectF spacingBound = painter.boundingRect( pointRect, textFlags, spacingString ); QRectF spacingRect( this->width() - spacingBound.width() - spaceBound.width()/2, this->height() - spacingBound.height() - spaceBound.height()/8, spacingBound.width(), spacingBound.height() ); painter.drawText( spacingRect, textFlags, spacingString, &spacingBound ); QString dimString = "Size = "; dimString.append( QString::number( d->ImageList[ d->SliceNumber ].width() ) ); dimString.append( ", " ); dimString.append( QString::number( d->ImageList[ d->SliceNumber ].height() ) ); dimString.append( ", " ); dimString.append( QString::number( d->ImageList.size() ) ); QRectF dimBound = painter.boundingRect( pointRect, textFlags, dimString ); QRectF dimRect( this->width() - dimBound.width() - spaceBound.width()/2, spacingBound.y() - dimBound.height() - spaceBound.height()/8, dimBound.width(), dimBound.height() ); painter.drawText( dimRect, textFlags, dimString, &dimBound ); QString rasString = "RAS = "; rasString.append( QString::number( this->xPosition() * this->xSpacing(), 'f', 3 ) ); rasString.append( ", " ); rasString.append( QString::number( this->yPosition() * this->ySpacing(), 'f', 3 ) ); rasString.append( ", " ); rasString.append( QString::number( this->slicePosition() * this->sliceSpacing(), 'f', 3 ) ); QRectF rasBound = painter.boundingRect( pointRect, textFlags, rasString ); QRectF rasRect( spaceBound.width()/2, this->height() - rasBound.height() - spaceBound.height()/8, rasBound.width(), rasBound.height() ); painter.drawText( rasRect, textFlags, rasString, &rasBound ); QString ijkString = "IJK = "; ijkString.append( QString::number( this->xPosition() ) ); ijkString.append( ", " ); ijkString.append( QString::number( this->yPosition() ) ); ijkString.append( ", " ); ijkString.append( QString::number( this->slicePosition() ) ); QRectF ijkBound = painter.boundingRect( pointRect, textFlags, ijkString ); QRectF ijkRect( spaceBound.width()/2, rasBound.y() - ijkBound.height() - spaceBound.height()/8, ijkBound.width(), ijkBound.height() ); painter.drawText( ijkRect, textFlags, ijkString, &ijkBound ); QString valString = "Value = "; valString.append( QString::number( this->positionValue(), 'f', 3 ) ); QRectF valBound = painter.boundingRect( pointRect, textFlags, valString ); QRectF valRect( spaceBound.width()/2, ijkBound.y() - valBound.height() - spaceBound.height()/8, valBound.width(), valBound.height() ); painter.drawText( valRect, textFlags, valString, &valBound ); } QColor lineColor; lineColor.setNamedColor( "red" ); lineColor.setAlpha( 128 ); painter.setPen( lineColor ); double x = ( this->xPosition() - d->TmpXMin ) / (d->TmpXMax - d->TmpXMin) * this->width(); double y = ( this->yPosition() - d->TmpYMin ) / (d->TmpYMax - d->TmpYMin) * this->height(); if( d->FlipXAxis ) { x = this->width() - x; } if( d->FlipYAxis ) { y = this->height() - y; } QLine lineX( x, 0, x, this->height() ); painter.drawLine( lineX ); QLine lineY( 0, y, this->width(), y ); painter.drawLine( lineY ); } } d->Window->setPixmap( d->TmpImage ); } else { d->Window->setText( "No Image Loaded." ); } }
void BasicCompositor::BeginFrame(const nsIntRegion& aInvalidRegion, const gfx::Rect *aClipRectIn, const gfx::Rect& aRenderBounds, gfx::Rect *aClipRectOut /* = nullptr */, gfx::Rect *aRenderBoundsOut /* = nullptr */) { LayoutDeviceIntRect intRect(LayoutDeviceIntPoint(), mWidget->GetClientSize()); Rect rect = Rect(0, 0, intRect.width, intRect.height); LayoutDeviceIntRegion invalidRegionSafe; if (mDidExternalComposition) { // We do not know rendered region during external composition, just redraw // whole widget. invalidRegionSafe = intRect; mDidExternalComposition = false; } else { // Sometimes the invalid region is larger than we want to draw. invalidRegionSafe.And( LayoutDeviceIntRegion::FromUnknownRegion(aInvalidRegion), intRect); } mInvalidRegion = invalidRegionSafe; mInvalidRect = mInvalidRegion.GetBounds(); if (aRenderBoundsOut) { *aRenderBoundsOut = Rect(); } BufferMode bufferMode = BufferMode::BUFFERED; if (mTarget) { // If we have a copy target, then we don't have a widget-provided mDrawTarget (currently). Use a dummy // placeholder so that CreateRenderTarget() works. mDrawTarget = gfxPlatform::GetPlatform()->ScreenReferenceDrawTarget(); } else { // StartRemoteDrawingInRegion can mutate mInvalidRegion. mDrawTarget = mWidget->StartRemoteDrawingInRegion(mInvalidRegion, &bufferMode); if (!mDrawTarget) { return; } mInvalidRect = mInvalidRegion.GetBounds(); if (mInvalidRect.IsEmpty()) { mWidget->EndRemoteDrawingInRegion(mDrawTarget, mInvalidRegion); return; } } if (!mDrawTarget || mInvalidRect.IsEmpty()) { return; } // Setup an intermediate render target to buffer all compositing. We will // copy this into mDrawTarget (the widget), and/or mTarget in EndFrame() RefPtr<CompositingRenderTarget> target = CreateRenderTargetForWindow(mInvalidRect.ToUnknownRect(), INIT_MODE_CLEAR, bufferMode); if (!target) { if (!mTarget) { mWidget->EndRemoteDrawingInRegion(mDrawTarget, mInvalidRegion); } return; } SetRenderTarget(target); // We only allocate a surface sized to the invalidated region, so we need to // translate future coordinates. mRenderTarget->mDrawTarget->SetTransform(Matrix::Translation(-mRenderTarget->GetOrigin())); gfxUtils::ClipToRegion(mRenderTarget->mDrawTarget, mInvalidRegion.ToUnknownRegion()); if (aRenderBoundsOut) { *aRenderBoundsOut = rect; } if (aClipRectIn) { mRenderTarget->mDrawTarget->PushClipRect(*aClipRectIn); } else { mRenderTarget->mDrawTarget->PushClipRect(rect); if (aClipRectOut) { *aClipRectOut = rect; } } }