[Marble-devel] [PATCH 04/13] Blending::blend(): change type of parameter top: QImage -> TextureTile.
Torsten Rahn
tackat at t-online.de
Wed Mar 31 09:31:31 CEST 2010
On Dienstag 30 März 2010 20:30:12 Jens-Michael Hoffmann wrote:
> Blending::blend(): change type of parameter top: QImage -> TextureTile.
>
> The SunLightBlending will need the tile coordinates and zoom level, the
> easiest way to achieve this is to just pass the TextureTile here.
> ---
> marble/src/lib/Blending.h | 5 ++++-
> marble/src/lib/BlendingAlgorithms.cpp | 18 ++++++++++++------
> marble/src/lib/BlendingAlgorithms.h | 4 ++--
> marble/src/lib/StackedTile.cpp | 2 +-
> 4 files changed, 19 insertions(+), 10 deletions(-)
>
> diff --git a/marble/src/lib/Blending.h b/marble/src/lib/Blending.h
> index 0dda3ec..e9e3b42 100644
> --- a/marble/src/lib/Blending.h
> +++ b/marble/src/lib/Blending.h
> @@ -16,16 +16,19 @@
> #ifndef MARBLE_BLENDING_H
> #define MARBLE_BLENDING_H
>
> +#include <QtCore/QSharedPointer>
> +
> class QImage;
>
> namespace Marble
> {
> +class TextureTile;
>
> class Blending
> {
> public:
> virtual ~Blending();
> - virtual void blend( QImage * const bottom, QImage const * const top )
> const = 0; + virtual void blend( QImage * const bottom,
> QSharedPointer<TextureTile> const & top ) const = 0; };
>
> }
> diff --git a/marble/src/lib/BlendingAlgorithms.cpp
> b/marble/src/lib/BlendingAlgorithms.cpp index 33f5233..a11bd2e 100644
> --- a/marble/src/lib/BlendingAlgorithms.cpp
> +++ b/marble/src/lib/BlendingAlgorithms.cpp
> @@ -15,6 +15,8 @@
>
> #include "BlendingAlgorithms.h"
>
> +#include "TextureTile.h"
> +
> #include <cmath>
>
> #include <QtGui/QImage>
> @@ -22,15 +24,17 @@
> namespace Marble
> {
>
> -void IndependentChannelBlending::blend( QImage * const bottom, QImage
> const * const top ) const +void IndependentChannelBlending::blend( QImage
> * const bottom, QSharedPointer<TextureTile> const & top ) const {
> - Q_ASSERT( bottom->size() == top->size() );
> + QImage const * const topImage = top->image();
> + Q_ASSERT( topImage );
> + Q_ASSERT( bottom->size() == topImage->size() );
> int const width = bottom->width();
> int const height = bottom->height();
> for ( int y = 0; y < height; ++y ) {
> for ( int x = 0; x < width; ++x ) {
> QRgb const bottomPixel = bottom->pixel( x, y );
> - QRgb const topPixel = top->pixel( x, y );
> + QRgb const topPixel = topImage->pixel( x, y );
> qreal const resultRed = blendChannel( qRed( bottomPixel ) /
> 255.0, qRed( topPixel ) / 255.0 ); qreal const resultGreen = blendChannel(
> qGreen( bottomPixel ) / 255.0, @@ -257,14 +261,16 @@ qreal
> HalfDifferenceBlending::blendChannel( qreal const bottomColorIntensity,
>
> // Special purpose blendings
>
> -void CloudsBlending::blend( QImage * const bottom, QImage const * const
> top ) const +void CloudsBlending::blend( QImage * const bottom,
> QSharedPointer<TextureTile> const & top ) const {
> - Q_ASSERT( bottom->size() == top->size() );
> + QImage const * const topImage = top->image();
> + Q_ASSERT( topImage );
> + Q_ASSERT( bottom->size() == topImage->size() );
> int const width = bottom->width();
> int const height = bottom->height();
> for ( int y = 0; y < height; ++y ) {
> for ( int x = 0; x < width; ++x ) {
> - qreal const c = qRed( top->pixel( x, y )) / 255.0;
> + qreal const c = qRed( topImage->pixel( x, y )) / 255.0;
> QRgb const bottomPixel = bottom->pixel( x, y );
> int const bottomRed = qRed( bottomPixel );
> int const bottomGreen = qGreen( bottomPixel );
> diff --git a/marble/src/lib/BlendingAlgorithms.h
> b/marble/src/lib/BlendingAlgorithms.h index 7887c38..a2987f3 100644
> --- a/marble/src/lib/BlendingAlgorithms.h
> +++ b/marble/src/lib/BlendingAlgorithms.h
> @@ -26,7 +26,7 @@ namespace Marble
> class IndependentChannelBlending: public Blending
> {
> public:
> - virtual void blend( QImage * const bottom, QImage const * const top )
> const; + virtual void blend( QImage * const bottom,
> QSharedPointer<TextureTile> const & top ) const; private:
> // bottomColorIntensity: intensity of one color channel (of one pixel)
> of the bottom image // topColorIntensity: intensity of one color channel
> (of one pixel) of the top image @@ -238,7 +238,7 @@ class
> HalfDifferenceBlending: public IndependentChannelBlending class
> CloudsBlending: public Blending
> {
> public:
> - virtual void blend( QImage * const bottom, QImage const * const top )
> const; + virtual void blend( QImage * const bottom,
> QSharedPointer<TextureTile> const & top ) const; };
>
> }
> diff --git a/marble/src/lib/StackedTile.cpp
> b/marble/src/lib/StackedTile.cpp index d44ef55..c3cb0ef 100644
> --- a/marble/src/lib/StackedTile.cpp
> +++ b/marble/src/lib/StackedTile.cpp
> @@ -371,7 +371,7 @@ void StackedTile::initResultTile()
> Blending const * const blending = (*pos)->blending();
> if ( blending ) {
> mDebug() << "StackedTile::initResultTile: blending";
> - blending->blend( &d->m_resultTile, (*pos)->image() );
> + blending->blend( &d->m_resultTile, *pos );
> }
> else {
> mDebug() << "StackedTile::initResultTile: no blending
> defined => copying top over bottom image";
Looks good to me. Ship it. :-)
More information about the Marble-devel
mailing list