PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::grafix::Drawable Klassenreferenz

Basisklasse für Zeichenflächen. Mehr ...

Basisklasse für ppl7::grafix::Image.

Öffentliche Methoden

Konstruktoren
 Drawable ()
 
 Drawable (const Drawable &other)
 Copy-Konstruktor. Mehr ...
 
 Drawable (const Drawable &other, const Rect &rect)
 Copy-Konstruktor mit Bildausschnitt. Mehr ...
 
 Drawable (const Drawable &other, const Point &p, const Size &s)
 Copy-Konstruktor mit Bildausschnitt. Mehr ...
 
 Drawable (void *base, ppluint32 pitch, int width, int height, const RGBFormat &format)
 Konstruktor mit Erstellung aus einem Speicherbereich. Mehr ...
 
 ~Drawable ()
 Destruktor der Klasse. Mehr ...
 
Verschiedenes
GRAFIX_FUNCTIONSgetFunctions ()
 Pointer auf die Grafik-Funktionen für das Farbformat dieses Drawable holen. Mehr ...
 
DRAWABLE_DATAgetData ()
 Pointer auf die Datenstruktur des Drawable holen. Mehr ...
 
void copy (const Drawable &other)
 Grafik von einem anderen Drawable kopieren. Mehr ...
 
void copy (const Drawable &other, const Rect &rect)
 Ausschnitt von einem anderen Drawable kopieren. Mehr ...
 
void copy (const Drawable &other, const Point &p, const Size &s)
 Ausschnitt von einem anderen Drawable kopieren. Mehr ...
 
void create (void *base, ppluint32 pitch, int width, int height, const RGBFormat &format)
 Drawable anhand einer Speicheradresse initialisieren. Mehr ...
 
Drawableoperator= (const Drawable &other)
 Drawable kopieren. Mehr ...
 
Rect rect () const
 Rechteck des Drawable auslesen. Mehr ...
 
Size size () const
 Größe des Drawable auslesen. Mehr ...
 
int width () const
 Breite der Grafik in Pixel. Mehr ...
 
int height () const
 Höhe der Grafik in Pixel. Mehr ...
 
int pitch () const
 Bytes pro Zeile. Mehr ...
 
int bytesPerPixel () const
 Bytes pro Pixel. Mehr ...
 
int bitdepth () const
 Bittiefe der Grafik (Bits pro Pixel) Mehr ...
 
RGBFormat rgbformat () const
 Farbformat des Drawable auslesen. Mehr ...
 
bool isEmpty () const
 Enthält dieses Drawable eine Grafik? Mehr ...
 
void * adr () const
 Speicheradresse der Grafik. Mehr ...
 
void * adr (int x, int y) const
 Speicheradresse der angegebenen Koordinaten. Mehr ...
 
void cls (const Color &c)
 Grafik löschen. Mehr ...
 
void cls ()
 Grafik löschen. Mehr ...
 
Drawable getDrawable () const
 Ein neues Drawable erstellen. Mehr ...
 
Drawable getDrawable (const Rect &rect) const
 Ein neues Drawable anhand eines Ausschnitts erstellen. Mehr ...
 
Drawable getDrawable (const Point &p, const Size &s) const
 
Drawable getDrawable (int x1, int y1, int x2, int y2) const
 Ein neues Drawable anhand eines Ausschnitts erstellen. Mehr ...
 
Image scaled (int width, int height, bool keepAspectRation=true, bool smoothTransform=false)
 
void scale (Image &tgt, int width, int height, bool keepAspectRation=true, bool smoothTransform=false)
 
Farben
SurfaceColor rgb (const Color &c) const
 Farbe in einen Farbformatspezifischen Wert umrechnen. Mehr ...
 
SurfaceColor rgb (int r, int g, int b, int alpha) const
 Farbe in einen Farbformatspezifischen Wert umrechnen. Mehr ...
 
Pixel
void putPixel (int x, int y, const Color &c)
 
void putPixel (const Point &p, const Color &c)
 
void alphaPixel (int x, int y, const Color &c)
 
void alphaPixel (const Point &p, const Color &c)
 
void blendPixel (int x, int y, const Color &c, float brightness)
 
void blendPixel (int x, int y, const Color &c, int brightness)
 
Color getPixel (int x, int y) const
 
Color getPixel (const Point &p) const
 
Geometrische Formen
void drawRect (const Rect &rect, const Color &c)
 Rechteck zeichnen. Mehr ...
 
void drawRect (int x1, int y1, int x2, int y2, const Color &c)
 Rechteck zeichnen. Mehr ...
 
void fillRect (const Rect &rect, const Color &c)
 Ausgefülltes Rechteck zeichnen. Mehr ...
 
void fillRect (int x1, int y1, int x2, int y2, const Color &c)
 Ausgefülltes Rechteck zeichnen. Mehr ...
 
void floodFill (int x, int y, const Color &color, const Color &border)
 Fläche mit Farbe füllen. Mehr ...
 
void elipse (int x, int y, int radx, int rady, const Color &c, bool fill=false)
 
void elipse (int x, int y, int radx, int rady, const Color &c, bool fill, const Color &fillcolor, int startangle, int endangle)
 
void circle (int x, int y, int rad, const Color &c, bool fill=false)
 
void circle (const Point &p, int rad, const Color &c, bool fill=false)
 
Effekte
void xchange (const Rect &rect, const Color &color, const Color &replace)
 Farben ersetzen. Mehr ...
 
void invert (const Rect &rect, const Color &color1, const Color &color2)
 Farben vertauschen. Mehr ...
 
void negativ (const Rect &rect)
 Negativ-Farben erstellen. Mehr ...
 
void colorGradient (const Rect &rect, const Color &c1, const Color &c2, int direction)
 
void colorGradient (int x1, int y1, int x2, int y2, const Color &c1, const Color &c2, int direction)
 
Linien zeichnen
void line (int x1, int y1, int x2, int y2, const Color &c)
 
void line (const Point &start, const Point &end, const Color &c)
 
void lineAA (int x1, int y1, int x2, int y2, const Color &c, int strength=1)
 
void lineAA (const Point &start, const Point &end, const Color &c, int strength=1)
 
Textausgabe
void print (const Font &font, int x, int y, const String &text)
 
void print (const Font &font, int x, int y, const WideString &text)
 Text ausgeben. Mehr ...
 
void printf (const Font &font, int x, int y, const char *fmt,...)
 Formatierten Text ausgeben. Mehr ...
 
Blit-Funktionen

Kopieren von Grafiken mit verschiedenen Methoden

int fitRect (int &x, int &y, Rect &r)
 Überprüft, ob eine Blit-Aktion in den Zeichenbereich passt. Mehr ...
 
void blt (const Drawable &source, int x=0, int y=0)
 Rechteck 1:1 kopieren. Mehr ...
 
void blt (const Drawable &source, const Rect &srect, int x=0, int y=0)
 Rechteck 1:1 kopieren. Mehr ...
 
void bltDiffuse (const Drawable &source, int x=0, int y=0, const Color &c=Color())
 Rechteck anhand der Intensität der Quellfarbe kopieren. Mehr ...
 
void bltDiffuse (const Drawable &source, const Rect &srect, int x=0, int y=0, const Color &c=Color())
 Rechteck anhand der Intensität der Quellfarbe kopieren. Mehr ...
 
void bltColorKey (const Drawable &source, int x=0, int y=0, const Color &c=Color())
 Rechteck unter Berücksichtigung einer transparenten Schlüsselfarbe kopieren. Mehr ...
 
void bltColorKey (const Drawable &source, const Rect &srect, int x=0, int y=0, const Color &c=Color())
 Rechteck unter Berücksichtigung einer transparenten Schlüsselfarbe kopieren. Mehr ...
 
void bltAlpha (const Drawable &source, int x=0, int y=0)
 Rechteck unter Berücksichtigung des Alpha-Kanals kopieren. Mehr ...
 
void bltAlpha (const Drawable &source, const Rect &srect, int x=0, int y=0)
 Rechteck unter Berücksichtigung des Alpha-Kanals kopieren. Mehr ...
 
void bltBlend (const Drawable &source, float factor, int x=0, int y=0)
 
void bltBlend (const Drawable &source, float factor, const Rect &srect, int x=0, int y=0)
 
void bltChromaKey (const Drawable &source, const Color &key, int tol1, int tol2, int x=0, int y=0)
 Rechteck unter Berücksichtigung eines Farbschlüssels kopieren (Bluescreen-Effekt) Mehr ...
 
void bltChromaKey (const Drawable &source, const Rect &srect, const Color &key, int tol1, int tol2, int x=0, int y=0)
 Rechteck unter Berücksichtigung eines Farbschlüssels kopieren (Bluescreen-Effekt) Mehr ...
 
void bltBackgroundOnChromaKey (const Drawable &background, const Color &key, int tol1, int tol2, int x=0, int y=0)
 Rechteck unter Berücksichtigung eines Farbschlüssels kopieren (Bluescreen-Effekt) Mehr ...
 
void bltBackgroundOnChromaKey (const Drawable &background, const Rect &srect, const Color &key, int tol1, int tol2, int x=0, int y=0)
 Rechteck unter Berücksichtigung eines Farbschlüssels kopieren (Bluescreen-Effekt) Mehr ...
 
void draw (const ImageList &iml, int nr, int x, int y)
 Grafik aus einer Image-Liste kopieren. Mehr ...
 
void draw (const ImageList &iml, int nr, int x, int y, const Color &diffuse)
 Grafik aus einer Image-Liste kopieren. Mehr ...
 
void draw (const Sprite &sprite, int nr, int x, int y)
 

Private Methoden

void initFunctions (const RGBFormat &format)
 Farbformatabhängige Grafik-Funktionen initialisieren. Mehr ...
 

Private Attribute

DRAWABLE_DATA data
 
GRAFIX_FUNCTIONSfn
 

Freundbeziehungen

class Image
 

Ausführliche Beschreibung

Beschreibung:
Die Klasse Drawable ist die Basisklasse für alle Grafikoperationen. Hier finden sich Funktionen zum Zeichnen von Pixeln, Linien und andere geometrische Formen, Bilder und Text. Sie verwaltet selbst keinen Speicher, sondern enthält nur einen Pointer auf einen Speicherbereich, Anzahl Bytes pro Zeile sowie Breite und Höhe in Pixel und das Farbformat.
Um die Klasse verwenden zu können, muss sie zunächst mit der Funktion Drawable::create oder über den passenden Konstruktor initialisiert werden. Oft erhält man die Klasse aber auch durch Aufruf einer Funktion. Die Klasse CImage ist von Drawable abgeleitet und verwaltet den für die Grafik benötigten Speicher.
Ein Drawable repräsentiert immer eine 2-Dimensionale Grafik mit einer horizontalen X-Achse und einer vertikalen Y-Achse. Die Koordinaten (0/0) befinden sich in der linken oberen Ecke und werden nach rechts, bzw. unten grösser.
Drawable.png
Eine Grafik mit einer Größe von 640 x 480 Pixeln hat somit Werte von 0 bis 639 auf der X-Achse und 0 bis 479 auf der Y-Achse.
Achtung
Ein Drawable kann beliebig kopiert werden. Dabei wird jedoch nur ein Pointer auf den ursprünglichen Speicherbereich kopiert, nicht aber die Grafik selbst. Man muss daher darauf achten, dass die ursprüngliche Speicher-verwaltende Klasse nicht gelöscht wird, solange davon kopierte Drawable-Klassen noch verwendet werden. Ist dies ungewiss, sollte man stattdessen in ein CImage kopieren, wobei eine echte Kopie des Originals erzeugt wird.
CImage Img(640,480,RGBFormat::A8R8G8B8); // Bild erstellen
Img.CLS(Color(0,0,0)); // Bild komplett schwarz
// Bildausschnitt in ein Drawable holen
Drawable Draw=Img.getDrawable(Rect(100,50,300,200));
// Einen roten Rahmen um den Bildausschnitt zeichnen
Draw.drawRect(Draw.rect(),Color(255,0,0));
// Neue Grafik erstellen, dadurch wird der bisherige Speicher freigegeben
Img.create(320,200,,RGBFormat::A8R8G8B8);
// Achtung: Draw zeigt nun auf ungültigen Speicher und darf nicht mehr
// verwendet werden!
Beispiel:
Das folgende Beispiel zeigt, wie die oben zu sehende Grafik erzeugt und als PNG gespeichert wird.
/*******************************************************************************
* This file is part of "Patrick's Programming Library", Version 7 (PPL7).
* Web: http://www.pfp.de/ppl/
*
* $Author$
* $Revision$
* $Date$
* $Id$
*
*******************************************************************************
* Copyright (c) 2013, Patrick Fedick <patrick@pfp.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER AND CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#include "prolog.h"
#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#include "ppl7.h"
#include "ppl7-grafix.h"
//#include "grafix7.h"
//#undef HAVE_X86_ASSEMBLER
namespace ppl7 {
namespace grafix {
/*!\class Drawable
* \ingroup PPLGroupGrafik
* \brief Basisklasse für Zeichenflächen
*
* \desc
* Die Klasse Drawable ist die Basisklasse für alle Grafikoperationen. Hier finden
* sich Funktionen zum Zeichnen von Pixeln, Linien und andere geometrische Formen,
* Bilder und Text. Sie verwaltet selbst keinen Speicher, sondern enthält nur einen Pointer
* auf einen Speicherbereich, Anzahl Bytes pro Zeile sowie Breite und Höhe in Pixel und
* das Farbformat.
* \par
* Um die Klasse verwenden zu können, muss sie zunächst mit der Funktion Drawable::create
* oder über den passenden Konstruktor initialisiert werden. Oft erhält man die Klasse aber
* auch durch Aufruf einer Funktion. Die Klasse CImage ist von Drawable abgeleitet und verwaltet
* den für die Grafik benötigten Speicher.
* \par
* Ein Drawable repräsentiert immer eine 2-Dimensionale Grafik mit einer horizontalen
* X-Achse und einer vertikalen Y-Achse. Die Koordinaten (0/0) befinden sich in der linken
* oberen Ecke und werden nach rechts, bzw. unten grösser.
* \par
* \image html Drawable.png
* \image latex Drawable.png
* \par
* Eine Grafik mit einer Größe von 640 x 480 Pixeln hat somit Werte von 0 bis 639 auf
* der X-Achse und 0 bis 479 auf der Y-Achse.
*
* \attention
* Ein Drawable kann beliebig kopiert werden. Dabei wird jedoch nur ein Pointer auf
* den ursprünglichen Speicherbereich kopiert, nicht aber die Grafik selbst. Man muss
* daher darauf achten, dass die ursprüngliche Speicher-verwaltende Klasse nicht
* gelöscht wird, solange davon kopierte Drawable-Klassen noch verwendet werden.
* Ist dies ungewiss, sollte man stattdessen in ein CImage kopieren, wobei eine
* echte Kopie des Originals erzeugt wird.
* \par
* \code
* CImage Img(640,480,RGBFormat::A8R8G8B8); // Bild erstellen
* Img.CLS(Color(0,0,0)); // Bild komplett schwarz
* // Bildausschnitt in ein Drawable holen
* Drawable Draw=Img.getDrawable(Rect(100,50,300,200));
* // Einen roten Rahmen um den Bildausschnitt zeichnen
* Draw.drawRect(Draw.rect(),Color(255,0,0));
* // Neue Grafik erstellen, dadurch wird der bisherige Speicher freigegeben
* Img.create(320,200,,RGBFormat::A8R8G8B8);
* // Achtung: Draw zeigt nun auf ungültigen Speicher und darf nicht mehr
* // verwendet werden!
* \endcode
*
* \example
* Das folgende Beispiel zeigt, wie die oben zu sehende Grafik erzeugt und als PNG
* gespeichert wird.
* \include Drawable.cpp
*/
/*!\class Konstruktor
*
* \desc
* Mit diesem Konstruktor wird ein leeres Drawable erstellt. Bevor es verwendet werden
* kann, muss zunächst mit Drawable::copy eine Kopie eines anderen Drawable oder davon
* abgeleiteten Objekts erstellt werden oder mit Drawable::create ein neues Drawable
* anhand eines Speicherbereichs erstellt werden.
*/
{
memset(&data,0,sizeof(data));
fn=NULL;
}
/*!\brief Copy-Konstruktor
*
* \desc
* Mit diesem Konstruktor wird eine Kopie eines anderen Drawable oder davon abgeleiteten
* Klasse erstellt.
*
* @param other Ein anderes Drawable
*/
{
memcpy(&data,&other.data,sizeof(data));
fn=other.fn;
}
/*!\brief Copy-Konstruktor mit Bildausschnitt
*
* \desc
* Mit diesem Konstruktor wird der Bildausschnitt \p rect aus dem Drawable \p other
* kopiert.
*
* @param other Ein anderes Drawable
* @param rect Bildausschnitt
*
* \exception ppl7::Exception::InitialisationFailed Diese Exception wird geworfen,
* wenn das Drawable nicht kopiert werden kann. Die genaue Ursache kann über den Fehlercode
* ausgelesen werden.
*/
Drawable::Drawable(const Drawable &other, const Rect &rect)
{
copy(other,rect);
}
/*!\brief Copy-Konstruktor mit Bildausschnitt
*
* \desc
* Mit diesem Konstruktor wird der Bildausschnitt \p rect aus dem Drawable \p other
* kopiert.
*
* @param other Ein anderes Drawable
* @param p Koordinate der linken oberen Ecke
* @param s Breite und Höhe
*
* \exception ppl7::Exception::InitialisationFailed Diese Exception wird geworfen,
* wenn das Drawable nicht kopiert werden kann. Die genaue Ursache kann über den Fehlercode
* ausgelesen werden.
*/
Drawable::Drawable(const Drawable &other, const Point &p, const Size &s)
{
Rect r(p,s);
copy(other,r);
}
/*!\brief Konstruktor mit Erstellung aus einem Speicherbereich
*
* \desc
* Mit diesem Konstruktor wird ein neues Drawable anhand einer Speicheradresse und
* weiterer Parameter erstellt.
*
* @param base Speicheradresse
* @param pitch Anzahl Bytes pro Bildzeile
* @param width Breite der Grafik in Pixel
* @param height Höhe der Grafik in Pixel
* @param format Farbformat
*
* \exception ppl7::Exception::InitialisationFailed Diese Exception wird geworfen,
* wenn das Drawable nicht mit den angegebenen Parametern erstellt werden kann.
* Die genaue Ursache kann über den Fehlercode ausgelesen werden.
*/
Drawable::Drawable(void *base, ppluint32 pitch, int width, int height, const RGBFormat &format)
{
memset(&data,0,sizeof(data));
fn=NULL;
create(base,pitch,width,height,format);
}
/*!\brief Destruktor der Klasse
*
* \desc
* Da die Klasse selbst keinen Speicher verwaltet, hat der Destruktor gegenwärtig keine
* Funktion.
*/
{
}
/*!\brief Pointer auf die Grafik-Funktionen für das Farbformat dieses Drawable holen
*
* \desc
* Diese Funktion liefert einen Pointer auf die Grafik-Funktionen für das Farbformat
* dieses Drawable zurück. Dieser kann NULL sein, wenn das Drawable noch nicht
* initialisiert wurde oder das angegebene Farbformat nicht unterstützt wird.
*
* @return Pointer auf eine GRAFIX_FUNCTIONS Struktur oder NULL. Es wird kein
* Fehlercode gesetzt.
*/
{
return fn;
}
/*!\brief Pointer auf die Datenstruktur des Drawable holen
*
* \desc
* Diese Funktion liefert einen Pointer auf die Struktur DRAWABLE_DATA des
* Drawable zurück. Diese enthält alle Informationen des Drawable, wie den
* Speicherbereich der Grafik, Breite und Höhe, Bytes pro Zeile (pitch) und das
* Farbformat.
*
* @return Pointer auf die DRAWABLE_DATA Struktur des Drawable.
*/
DRAWABLE_DATA *Drawable::getData()
{
return &data;
}
/*!\brief Farbformatabhängige Grafik-Funktionen initialisieren
*
* \desc
* Diese private Funktion wird intern bei der Erstellung des Drawable aufgerufen,
* um die farbformatabhängigen Grafik-Funktionen zu initialisieren.
*
* @param format Das gewünschte Farbformat
* @exception NoGrafixEngineException Die Grafikengine ist nicht initialisiert
*/
void Drawable::initFunctions(const RGBFormat &format)
{
Grafix *gfx=GetGrafix();
fn=data.fn=gfx->getGrafixFunctions(format);
}
/*!\brief Grafik von einem anderen Drawable kopieren
*
* \desc
* Mit dieser Funktion wird eine Kopie eines anderen Drawable erstellt.
*
* @param other Ein anderes Drawable
*/
void Drawable::copy(const Drawable &other)
{
memcpy(&data,&other.data,sizeof(data));
fn=other.fn;
}
/*!\brief Ausschnitt von einem anderen Drawable kopieren
*
* \desc
* Mit dieser Funktion wird der Bildausschnitt \p rect aus dem Drawable \p other
* kopiert.
*
* @param other Ein anderes Drawable
* @param rect Bildausschnitt
*
*/
void Drawable::copy(const Drawable &other, const Rect &rect)
{
Rect o(0,0,other.data.width,other.data.height);
Rect r=o.intersected(rect);
memset(&data,0,sizeof(data));
data.base8=other.data.base8
+r.top()*other.data.pitch
+r.left()*other.data.rgbformat.bytesPerPixel();
data.pitch=other.data.pitch;
data.width=r.width();
data.height=r.height();
data.rgbformat=other.data.rgbformat;
fn=other.fn;
data.fn=fn;
}
/*!\brief Ausschnitt von einem anderen Drawable kopieren
*
* \desc
* Mit dieser Funktion wird der Bildausschnitt, der bei der Koordinate \p p beginnt
* und eine Größe von \p s hat, aus dem Drawable \p other
* kopiert.
*
* @param other Ein anderes Drawable
* @param p Koordinate der linken oberen Ecke
* @param s Breite und Höhe
*
*/
void Drawable::copy(const Drawable &other, const Point &p, const Size &s)
{
Rect r(p,s);
copy(other,r);
}
/*!\brief Drawable anhand einer Speicheradresse initialisieren
*
* \desc
* Mit dieser Funktion wird das Drawable anhand einer Speicheradresse und
* weiterer Parameter initialisiert.
*
* @param base Speicheradresse
* @param pitch Anzahl Bytes pro Bildzeile
* @param width Breite der Grafik in Pixel
* @param height Höhe der Grafik in Pixel
* @param format Farbformat
* @exception NullPointerException Wird geworfen, wenn \p base auf NULL zeigt
* @exception IllegalArgumentException Einer der Parameter \p pitch, \p width oder \p height ist 0
* @exception UnknownColorFormatException Der Paremeter \p format enthält ein unbekanntes Farbformat
* @exception UnsupportedColorFormatException Das Farbformat \p format wird nicht unterstützt
* @exception NoGrafixEngineException Die Grafikengine ist nicht initialisiert
*/
void Drawable::create(void *base, ppluint32 pitch, int width, int height, const RGBFormat &format)
{
if (!base) throw NullPointerException();
if (!pitch) throw IllegalArgumentException();
if (width==0 || height==0) throw IllegalArgumentException();
data.base=base;
data.pitch=pitch;
data.width=width;
data.height=height;
data.rgbformat=format;
initFunctions(format);
}
/*!\brief Drawable kopieren
*
* \desc
* Mit diesem Operator wird eine Kopie eines anderen Drawable erstellt.
*
* @param other Anderes Drawable
* @return Referenz auf das neue Drawable
*/
{
memcpy(&data,&other.data,sizeof(data));
fn=other.fn;
return *this;
}
/*!\brief Rechteck des Drawable auslesen
*
* \desc
* Dieser Funktion liefert das Rechteck des Drawable zurück. Die Koordinaten des
* Rechtecks sind immer 0/0, Breite und Höhe sind die des Drawable.
*
* @return Ein Objekt von Typ Rect.
*/
Rect Drawable::rect() const
{
return Rect(0,0,data.width,data.height);
}
/*!\brief Größe des Drawable auslesen
*
* \desc
* Diese Funktion liefert Breite und Höhe des Drawable in einem Size-Objekt zurück.
*
* @return Objekt von Typ Size.
*/
Size Drawable::size() const
{
return Size(data.width,data.height);
}
/*!\brief Enthält dieses Drawable eine Grafik?
*
* \desc
* Mit dieser Funktion kann geprüft werden, ob das Drawable eine gültige und somit nutzbare
* Grafik enthält. Dies ist der Fall, wenn eine Basisadresse vorhanden ist, die Grafik eine
* Höhe und Breite größer 0 und ein gültiges Farbformat enthält.
*
* @return Liefert \c true zurück, wenn das Drawable eine gültige Grafik enthält, andernfalls
* \c false.
*/
bool Drawable::isEmpty() const
{
if (data.base==0 || data.width==0 || data.height==0) return true;
return false;
}
/*!\brief Farbformat des Drawable auslesen
*
* \desc
* Diese Funktion liefert das Farbformat des Drawable zurück.
*
* @return Farbformat
*/
RGBFormat Drawable::rgbformat() const
{
return data.rgbformat;
}
/*!\brief Breite der Grafik in Pixel
*
* \desc
* Diese Funktion liefert die Breite der Grafik in Pixel zurück.
*
* @return Breite in Pixel
*/
int Drawable::width() const
{
return data.width;
}
/*!\brief Höhe der Grafik in Pixel
*
* \desc
* Diese Funktion liefert die Höhe der Grafik in Pixel zurück.
*
* @return Höhe in Pixel
*/
int Drawable::height() const
{
return data.height;
}
/*!\brief Bytes pro Zeile
*
* \desc
* Mit dieser Funktion kann abgefragt werden, wieviele Bytes eine Grafikzeile benötigt.
* Dies muss nicht unbedingt das Ergebnis von Breite mal BytesProPixel sein, sondern kann
* auch mehr sein, z.B. wenn das Drawable nur einen Ausschnitt aus einer größeren Grafik
* enthält.
*
* @return Bytes pro Grafikzeile
*/
int Drawable::pitch() const
{
return data.pitch;
}
/*!\brief Bytes pro Pixel
*
* \desc
* Mit dieser Funktion kann ausgelesen werden, wieviele Bytes ein einzelner Pixel
* benötigt.
*
* @return Bytes pro Pixel
*/
{
return data.rgbformat.bitdepth()/8;
}
/*!\brief Bittiefe der Grafik (Bits pro Pixel)
*
* \desc
* Diese Funktion liefert die Anzahl Bits pro Pixel für das verwendete Farbformat zurück.
*
* @return Bits pro Pixel
*/
int Drawable::bitdepth() const
{
return data.rgbformat.bitdepth();
}
/*!\brief Ein neues Drawable erstellen
*
* \desc
* Diese Funktion liefert eine Kopie dieses Drawable zurück.
*
* @return Kopie des Drawable
*/
{
return *this;
}
/*!\brief Ein neues Drawable anhand eines Ausschnitts erstellen
*
* \desc
* Diese Funktion erstellt ein neues Drawable Objekt anhand des angegebenen Ausschnitts \p rect.
*
* @param rect Der gewünschte Bildausschnitt
* @return Neues Drawable, das den gewünschten Ausschnitt repräsentiert
*/
Drawable Drawable::getDrawable(const Rect &rect) const
{
return Drawable(*this,rect);
}
/*!\brief Ein neues Drawable anhand eines Ausschnitts erstellen
*
* \desc
* Diese Funktion erstellt ein neues Drawable Objekt anhand des angegebenen Koordinaten. Dabei
* ist zu beachten, dass der Ausschnitt inklusive der rechten unteren Ecke erstellt wird.
*
* @param x1 X-Koordinate der linken oberen Ecke
* @param y1 Y-Koordinate der linken oberen Ecke
* @param x2 X-Koordinate der rechten unteren Ecke
* @param y2 Y-Koordinate der rechten unteren Ecke
* @return Neues Drawable, das den gewünschten Ausschnitt repräsentiert
*/
Drawable Drawable::getDrawable(int x1, int y1, int x2, int y2) const
{
return Drawable(*this,Rect(x1,y1,x2-x1+1,y2-y1+1));
}
Drawable Drawable::getDrawable(const Point &p, const Size &s) const
{
return Drawable(*this,p,s);
}
/*!\brief Speicheradresse der Grafik
*
* \desc
* Diese Funktion gibt die Speicheradresse zurück, an der die Daten dieser Grafik
* beginnen.
*
* \return Speicheradresse
*/
void *Drawable::adr() const
{
return data.base;
}
/*!\brief Speicheradresse der angegebenen Koordinaten
*
* \desc
* Diese Funktion gibt die Speicheradresse zurück, an der sich die angegebenen
* Koordinaten \p x und \p y befinden.
* @param x X-Koordinate
* @param y Y-Koordinate
* @return Speicheradresse
* @exception OutOfBoundsEception Wird geworfen, wenn \p x oder \p y außerhalb des Zeichenbereichs liegen
*/
void *Drawable::adr(int x, int y) const
{
if (x<data.width && y<data.height) return data.base8+(y*data.pitch)+(x*data.rgbformat.bitdepth()/8);
throw OutOfBoundsEception();
}
Image Drawable::scaled(int width, int height, bool keepAspectRation, bool smoothTransform)
{
Image img;
scale(img,width,height,keepAspectRation,smoothTransform);
return img;
}
void Drawable::scale(Image &tgt, int width, int height, bool keepAspectRation, bool smoothTransform)
{
tgt.create(width,height,data.rgbformat);
int ow=data.width;
int oh=data.height;
int ox,oy;
if (keepAspectRation) {
int x1,y1,nw,nh;
float ratio=(float)data.width/(float)data.height;
if (height*ratio>width) {
nw=width;
nh=(int)((float)nw/ratio);
} else {
nh=height;
nw=(int)((float)nh*ratio);
}
//::printf ("old: %i x %i, new: %i x %i, new Image: %i x %i\n",ow,oh,width,height,nw,nh);
x1=(width-nw)/2;
y1=(height-nh)/2;
for (int y=0;y<nh;y++) {
for (int x=0;x<nw;x++) {
ox=x*ow/nw;
oy=y*oh/nh;
tgt.putPixel(x+x1,y+y1,getPixel(ox,oy));
}
}
} else {
for (int y=0;y<height;y++) {
for (int x=0;x<width;x++) {
ox=x*ow/width;
oy=y*oh/height;
tgt.putPixel(x,y,getPixel(ox,oy));
}
}
}
}
} // EOF namespace grafix
} // EOF namespace ppl7

Beschreibung der Konstruktoren und Destruktoren

ppl7::grafix::Drawable::Drawable ( )
ppl7::grafix::Drawable::Drawable ( const Drawable other)
Beschreibung:
Mit diesem Konstruktor wird eine Kopie eines anderen Drawable oder davon abgeleiteten Klasse erstellt.
Parameter
otherEin anderes Drawable
ppl7::grafix::Drawable::Drawable ( const Drawable other,
const Rect rect 
)
Beschreibung:
Mit diesem Konstruktor wird der Bildausschnitt rect aus dem Drawable other kopiert.
Parameter
otherEin anderes Drawable
rectBildausschnitt
Ausnahmebehandlung
ppl7::Exception::InitialisationFailedDiese Exception wird geworfen, wenn das Drawable nicht kopiert werden kann. Die genaue Ursache kann über den Fehlercode ausgelesen werden.
ppl7::grafix::Drawable::Drawable ( const Drawable other,
const Point p,
const Size s 
)
Beschreibung:
Mit diesem Konstruktor wird der Bildausschnitt rect aus dem Drawable other kopiert.
Parameter
otherEin anderes Drawable
pKoordinate der linken oberen Ecke
sBreite und Höhe
Ausnahmebehandlung
ppl7::Exception::InitialisationFailedDiese Exception wird geworfen, wenn das Drawable nicht kopiert werden kann. Die genaue Ursache kann über den Fehlercode ausgelesen werden.
ppl7::grafix::Drawable::Drawable ( void *  base,
ppluint32  pitch,
int  width,
int  height,
const RGBFormat format 
)
Beschreibung:
Mit diesem Konstruktor wird ein neues Drawable anhand einer Speicheradresse und weiterer Parameter erstellt.
Parameter
baseSpeicheradresse
pitchAnzahl Bytes pro Bildzeile
widthBreite der Grafik in Pixel
heightHöhe der Grafik in Pixel
formatFarbformat
Ausnahmebehandlung
ppl7::Exception::InitialisationFailedDiese Exception wird geworfen, wenn das Drawable nicht mit den angegebenen Parametern erstellt werden kann. Die genaue Ursache kann über den Fehlercode ausgelesen werden.
ppl7::grafix::Drawable::~Drawable ( )
Beschreibung:
Da die Klasse selbst keinen Speicher verwaltet, hat der Destruktor gegenwärtig keine Funktion.

Dokumentation der Elementfunktionen

void * ppl7::grafix::Drawable::adr ( ) const
Beschreibung:
Diese Funktion gibt die Speicheradresse zurück, an der die Daten dieser Grafik beginnen.
Rückgabe
Speicheradresse
void * ppl7::grafix::Drawable::adr ( int  x,
int  y 
) const
Beschreibung:
Diese Funktion gibt die Speicheradresse zurück, an der sich die angegebenen Koordinaten x und y befinden.
Parameter
xX-Koordinate
yY-Koordinate
Rückgabe
Speicheradresse
Ausnahmebehandlung
OutOfBoundsEceptionWird geworfen, wenn x oder y außerhalb des Zeichenbereichs liegen
void ppl7::grafix::Drawable::alphaPixel ( int  x,
int  y,
const Color c 
)
void ppl7::grafix::Drawable::alphaPixel ( const Point p,
const Color c 
)
int ppl7::grafix::Drawable::bitdepth ( ) const
Beschreibung:
Diese Funktion liefert die Anzahl Bits pro Pixel für das verwendete Farbformat zurück.
Rückgabe
Bits pro Pixel
void ppl7::grafix::Drawable::blendPixel ( int  x,
int  y,
const Color c,
float  brightness 
)
void ppl7::grafix::Drawable::blendPixel ( int  x,
int  y,
const Color c,
int  brightness 
)
void ppl7::grafix::Drawable::blt ( const Drawable source,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion wird die Quellzeichenfläche source an die Position x / y der Zielzeichenfläche kopiert, wobei alle Farbinformationen 1:1 übernommen werden. Es wird weder Alphablending (siehe Drawable::bltAlpha) noch Colorkeying (siehe Drawable::bltColorKey) verwendet. Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]xOptionale X-Koordinate der linken oberen Ecke in der Zielzeichenfläche. Wird der Parameter nicht angegeben, wird 0 verwendet.
[in]yOptionale Y-Koordinate der linken oberen Ecke in der Zielzeichenfläche. Wird der Parameter nicht angegebenm wird 0 verwendet.
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::blt ( const Drawable source,
const Rect srect,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion wird der Ausschnitt srect aus der Quellzeichenfläche source an die Position x / y kopiert, wobei alle Farbinformationen 1:1 übernommen werden. Es wird weder Alphablending (siehe Drawable::bltAlpha) noch Colorkeying (siehe Drawable::bltColorKey) verwendet. Falls srect 0 ist, wird die komplette Quellzeichenfläche kopiert, andernfalls nur der angegebene Ausschnitt. Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]srectRechteckiger Ausschnitt aus der Quellzeichenfläche, der kopiert werden soll
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltAlpha ( const Drawable source,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion wird die Quellzeichenfläche source an die Position x / y unter Berücksichtigung des Alphakanals der Quelle kopiert. Der Alphakanal bestimmt die Transparenz eines Pixels. Ist sie 0, wird der Pixel nicht kopiert, bei einem Wert von 255 wird er 1:1 kopiert. Dazwischen wird die Farbe abhängig vom Transparenz-Wert mit dem Hintergrund vermischt.
Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Schlüsselfarbe (ColorKey)
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltAlpha ( const Drawable source,
const Rect srect,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion wird der Ausschnitt srect aus der Quellzeichenfläche source an die Position x / y unter Berücksichtigung des Alphakanals der Quelle kopiert. Der Alphakanal bestimmt die Transparenz eines Pixels. Ist sie 0, wird der Pixel nicht kopiert, bei einem Wert von 255 wird er 1:1 kopiert. Dazwischen wird die Farbe abhängig vom Transparenz-Wert mit dem Hintergrund vermischt.
Falls srect 0 ist, wird die komplette Quellzeichenfläche kopiert, andernfalls nur der angegebene Ausschnitt. Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]srectRechteckiger Ausschnitt aus der Quellzeichenfläche, der kopiert werden soll
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Schlüsselfarbe (ColorKey)
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltBackgroundOnChromaKey ( const Drawable background,
const Color key,
int  tol1,
int  tol2,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion kann ein "Bluescreen-Effekt" erzielt werden (siehe http://de.wikipedia.org/wiki/Bluescreen-Technik#Greenscreen). Dabei wird die Hintergundgrafik background mittels eines Farbschlüssels key (Chroma Key), sowie zwei Toleranz-Werten über die Grafik gelegt.
Parameter
sourceQuellgrafik
keyFarbschlüssel (z.B. Color(0,0,255) für einen Bluescreen oder Color(0,255,0) für einen Greenscreen)
tol1Untere Toleranz: Farbabweichungen bis zu diesem Toleranzwert, werden komplett Transparent, das heisst der Hintergrund wird übernommen
tol2Obere Toleranz: Farbabweichungen, die zwischen tol1 und tol2 liegen, werden je nach Stärke der Abweichung überblendet. Je stärker die Abweichung, desto mehr Hintergrund ist zu sehen
xZielkoordinate für das Rechteck (optional, Default ist 0)
yZielkoordinate für das Rechteck (optional, Default ist 0)
Bemerkungen
Auf 64-Bit-Systemen mit SSE2-Unterstützung werden optimierte Assembler-Routinen verwendet. Sofern Bildbreite durch 4 und die Speicheradressen durch 16 teilbar sind, werden jeweils 4 Pixel gleichzeitig berechnet.
Siehe auch
Die Funktion bltChromaKey wendet den Farbschlüssel auf das Quellbild source an.
Die Funktion bltBackgroundOnChromaKey wendet den Farbschlüssel nicht auf das Quellbild source sondern den Hintergrund an.
void ppl7::grafix::Drawable::bltBackgroundOnChromaKey ( const Drawable background,
const Rect srect,
const Color key,
int  tol1,
int  tol2,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion kann ein "Bluescreen-Effekt" erzielt werden (siehe http://de.wikipedia.org/wiki/Bluescreen-Technik#Greenscreen). Dabei wird die Hintergundgrafik background mittels eines Farbschlüssels key (Chroma Key), sowie zwei Toleranz-Werten über die Grafik gelegt.
Parameter
backgroundHintergundgrafik
srectRechteckiger Ausschnitt aus der Hintergundgrafik background, der kopiert werden soll
keyFarbschlüssel (z.B. Color(0,0,255) für einen Bluescreen oder Color(0,255,0) für einen Greenscreen)
tol1Untere Toleranz: Farbabweichungen bis zu diesem Toleranzwert, werden komplett Transparent, das heisst der Hintergrund wird übernommen
tol2Obere Toleranz: Farbabweichungen, die zwischen tol1 und tol2 liegen, werden je nach Stärke der Abweichung überblendet. Je stärker die Abweichung, desto mehr Hintergrund ist zu sehen
xZielkoordinate für das Rechteck (optional, Default ist 0)
yZielkoordinate für das Rechteck (optional, Default ist 0)
Bemerkungen
Auf 64-Bit-Systemen mit SSE2-Unterstützung werden optimierte Assembler-Routinen verwendet. Sofern Bildbreite durch 4 und die Speicheradressen durch 16 teilbar sind, werden jeweils 4 Pixel gleichzeitig berechnet.
Siehe auch
Die Funktion bltChromaKey wendet den Farbschlüssel auf das Quellbild source an.
Die Funktion bltBackgroundOnChromaKey wendet den Farbschlüssel nicht auf das Quellbild source sondern den Hintergrund an.
void ppl7::grafix::Drawable::bltBlend ( const Drawable source,
float  factor,
int  x = 0,
int  y = 0 
)
void ppl7::grafix::Drawable::bltBlend ( const Drawable source,
float  factor,
const Rect srect,
int  x = 0,
int  y = 0 
)
void ppl7::grafix::Drawable::bltChromaKey ( const Drawable source,
const Color key,
int  tol1,
int  tol2,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion kann ein "Bluescreen-Effekt" erzielt werden (siehe http://de.wikipedia.org/wiki/Bluescreen-Technik#Greenscreen). Dabei wird die Quellgrafik source mittels eines Farbschlüssels key (Chroma Key), sowie zwei Toleranz-Werten über den Hintergrund gelegt.
Parameter
sourceQuellgrafik
keyFarbschlüssel (z.B. Color(0,0,255) für einen Bluescreen oder Color(0,255,0) für einen Greenscreen)
tol1Untere Toleranz: Farbabweichungen bis zu diesem Toleranzwert, werden komplett Transparent, das heisst der Hintergrund wird übernommen
tol2Obere Toleranz: Farbabweichungen, die zwischen tol1 und tol2 liegen, werden je nach Stärke der Abweichung überblendet. Je stärker die Abweichung, desto mehr Hintergrund ist zu sehen
xZielkoordinate für das Rechteck (optional, Default ist 0)
yZielkoordinate für das Rechteck (optional, Default ist 0)
Bemerkungen
Auf 64-Bit-Systemen mit SSE2-Unterstützung werden optimierte Assembler-Routinen verwendet. Sofern Bildbreite durch 4 und die Speicheradressen durch 16 teilbar sind, werden jeweils 4 Pixel gleichzeitig berechnet.
Siehe auch
Die Funktion bltChromaKey wendet den Farbschlüssel auf das Quellbild source an.
Die Funktion bltBackgroundOnChromaKey wendet den Farbschlüssel nicht auf das Quellbild source sondern den Hintergrund an.
void ppl7::grafix::Drawable::bltChromaKey ( const Drawable source,
const Rect srect,
const Color key,
int  tol1,
int  tol2,
int  x = 0,
int  y = 0 
)
Beschreibung:
Mit dieser Funktion kann ein "Bluescreen-Effekt" erzielt werden (siehe http://de.wikipedia.org/wiki/Bluescreen-Technik#Greenscreen). Dabei wird die Quellgrafik source mittels eines Farbschlüssels key (Chroma Key), sowie zwei Toleranz-Werten über den Hintergrund gelegt.
Parameter
sourceQuellgrafik
srectRechteckiger Ausschnitt aus der Quellgrafik source, der kopiert werden soll
keyFarbschlüssel (z.B. Color(0,0,255) für einen Bluescreen oder Color(0,255,0) für einen Greenscreen)
tol1Untere Toleranz: Farbabweichungen bis zu diesem Toleranzwert, werden komplett Transparent, das heisst der Hintergrund wird übernommen
tol2Obere Toleranz: Farbabweichungen, die zwischen tol1 und tol2 liegen, werden je nach Stärke der Abweichung überblendet. Je stärker die Abweichung, desto mehr Hintergrund ist zu sehen
xZielkoordinate für das Rechteck (optional, Default ist 0)
yZielkoordinate für das Rechteck (optional, Default ist 0)
Bemerkungen
Auf 64-Bit-Systemen mit SSE2-Unterstützung werden optimierte Assembler-Routinen verwendet. Sofern Bildbreite durch 4 und die Speicheradressen durch 16 teilbar sind, werden jeweils 4 Pixel gleichzeitig berechnet.
Siehe auch
Die Funktion bltChromaKey wendet den Farbschlüssel auf das Quellbild source an.
Die Funktion bltBackgroundOnChromaKey wendet den Farbschlüssel nicht auf das Quellbild source sondern den Hintergrund an.
void ppl7::grafix::Drawable::bltColorKey ( const Drawable source,
int  x = 0,
int  y = 0,
const Color c = Color() 
)
Beschreibung:
Mit dieser Funktion wird die Quellzeichenfläche source an die Position x / y unter Berücksichtigung der Schlüsselfarbe c kopiert. Pixel, die der Farbe entsprechen, bleiben dabei vollständig transparent, alle anderen Pixel werden wie bei Drawable::blt 1:1 kopiert.
Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Schlüsselfarbe (ColorKey)
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltColorKey ( const Drawable source,
const Rect srect,
int  x = 0,
int  y = 0,
const Color c = Color() 
)
Beschreibung:
Mit dieser Funktion wird der Ausschnitt srect aus der Quellzeichenfläche source an die Position x / y unter Berücksichtigung der Schlüsselfarbe c kopiert. Pixel, die der Farbe entsprechen, bleiben dabei vollständig transparent, alle anderen Pixel werden wie bei Drawable::blt 1:1 kopiert.
Falls srect 0 ist, wird die komplette Quellzeichenfläche kopiert, andernfalls nur der angegebene Ausschnitt. Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]srectRechteckiger Ausschnitt aus der Quellzeichenfläche, der kopiert werden soll
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Schlüsselfarbe (ColorKey)
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltDiffuse ( const Drawable source,
int  x = 0,
int  y = 0,
const Color c = Color() 
)
Beschreibung:
Mit dieser Funktion wird die Quellzeichenfläche source an die Position x / y kopiert, wobei die Intensität der Quellpixel geprüft wird und diese in gleicher Intensität mit der angegebenen Farbe gezeichnet werden. Bei halbtransparenten Pixeln wird die Farbe mit dem Hintergrund gemischt. Die Funktion ist daher zum Zeichnen von einfarbigen Grafiken unterschiedlicher Intensität gedacht (z.B. grafische Elemente einer GUI).
Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Pixelfarbe
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
void ppl7::grafix::Drawable::bltDiffuse ( const Drawable source,
const Rect srect,
int  x = 0,
int  y = 0,
const Color c = Color() 
)
Beschreibung:
Mit dieser Funktion wird der Ausschnitt srect aus der Quellzeichenfläche source an die Position x / y kopiert, wobei die Intensität der Quellpixel geprüft wird und diese in gleicher Intensität mit der angegebenen Farbe gezeichnet werden. Bei halbtransparenten Pixeln wird die Farbe mit dem Hintergrund gemischt. Die Funktion ist daher zum Zeichnen von einfarbigen Grafiken unterschiedlicher Intensität gedacht (z.B. grafische Elemente einer GUI).
Falls srect 0 ist, wird die komplette Quellzeichenfläche kopiert, andernfalls nur der angegebene Ausschnitt. Falls die Quelle nicht in die Zielzeichenfläche passt, wird nur der passende Teil kopiert (siehe Drawable::fitRect). Falls die Quelle komplett außerhalb der Zeichenfläche liegt, passiert nichts.
Parameter
[in]sourceDie Quellzeichenfläche
[in]srectRechteckiger Ausschnitt aus der Quellzeichenfläche, der kopiert werden soll
[in]xX-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]yY-Koordinate der linken oberen Ecke in der Zielzeichenfläche
[in]cDie gewünschte Pixelfarbe
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
int ppl7::grafix::Drawable::bytesPerPixel ( ) const
Beschreibung:
Mit dieser Funktion kann ausgelesen werden, wieviele Bytes ein einzelner Pixel benötigt.
Rückgabe
Bytes pro Pixel
void ppl7::grafix::Drawable::circle ( int  x,
int  y,
int  rad,
const Color c,
bool  fill = false 
)
void ppl7::grafix::Drawable::circle ( const Point p,
int  rad,
const Color c,
bool  fill = false 
)
void ppl7::grafix::Drawable::cls ( const Color c)
Beschreibung:
Durch Aufruf dieser Funktion wird die komplette Grafik gelöscht und mit der Angegebenen Farbe gefüllt.
Parameter
[in]cFarbwert
void ppl7::grafix::Drawable::cls ( )
Beschreibung:
Durch Aufruf dieser Funktion wird die komplette Grafik gelöscht, indem der Speicherbereich mit 0 beschrieben wird. Optional kann die Funktion auch mit einem Farbwert aufgerufen werden (siehe Drawable::cls(const Color &c)).
void ppl7::grafix::Drawable::colorGradient ( const Rect rect,
const Color c1,
const Color c2,
int  direction 
)
void ppl7::grafix::Drawable::colorGradient ( int  x1,
int  y1,
int  x2,
int  y2,
const Color c1,
const Color c2,
int  direction 
)
void ppl7::grafix::Drawable::copy ( const Drawable other)
Beschreibung:
Mit dieser Funktion wird eine Kopie eines anderen Drawable erstellt.
Parameter
otherEin anderes Drawable
void ppl7::grafix::Drawable::copy ( const Drawable other,
const Rect rect 
)
Beschreibung:
Mit dieser Funktion wird der Bildausschnitt rect aus dem Drawable other kopiert.
Parameter
otherEin anderes Drawable
rectBildausschnitt
void ppl7::grafix::Drawable::copy ( const Drawable other,
const Point p,
const Size s 
)
Beschreibung:
Mit dieser Funktion wird der Bildausschnitt, der bei der Koordinate p beginnt und eine Größe von s hat, aus dem Drawable other kopiert.
Parameter
otherEin anderes Drawable
pKoordinate der linken oberen Ecke
sBreite und Höhe
void ppl7::grafix::Drawable::create ( void *  base,
ppluint32  pitch,
int  width,
int  height,
const RGBFormat format 
)
Beschreibung:
Mit dieser Funktion wird das Drawable anhand einer Speicheradresse und weiterer Parameter initialisiert.
Parameter
baseSpeicheradresse
pitchAnzahl Bytes pro Bildzeile
widthBreite der Grafik in Pixel
heightHöhe der Grafik in Pixel
formatFarbformat
Ausnahmebehandlung
NullPointerExceptionWird geworfen, wenn base auf NULL zeigt
IllegalArgumentExceptionEiner der Parameter pitch, width oder height ist 0
UnknownColorFormatExceptionDer Paremeter format enthält ein unbekanntes Farbformat
UnsupportedColorFormatExceptionDas Farbformat format wird nicht unterstützt
NoGrafixEngineExceptionDie Grafikengine ist nicht initialisiert
void ppl7::grafix::Drawable::draw ( const ImageList iml,
int  nr,
int  x,
int  y 
)
Beschreibung:
Mit dieser Funktion wird eine Grafik aus einer Image-Liste (siehe CImageList) kopiert. Jenachdem welche Zeichenmethode in der Image-Liste definiert ist, wird dazu entweder Drawable::blt, Drawable::bltDiffuse, Drawable::bltColorKey oder Drawable::bltAlpha verwendet.
Parameter
imlImage-Liste
nrNummer der Grafik innerhalb der Image-Liste
xX-Koordinate der Zielposition
yY-Koordinate der Zielposition
Ausnahmebehandlung
EmptyDrawableExceptionDer Parameter source enthält keinen darstellbaren Inhalt
FunctionUnavailableExceptionFunktion wird für das eingestellte Farbformat nicht unterstützt
UnknownBltMethodExceptionDie Zeichenmethode der ImageList ist unbekannt
void ppl7::grafix::Drawable::draw ( const ImageList iml,
int  nr,
int  x,
int  y,
const Color diffuse 
)
Beschreibung:
Mit dieser Funktion wird eine Grafik aus einer Image-Liste (siehe CImageList) kopiert. Jenachdem welche Zeichenmethode in der Image-Liste definiert ist, wird dazu entweder Drawable::blt, Drawable::bltDiffuse, Drawable::bltColorKey oder Drawable::bltAlpha verwendet. Ist die Methode CImageList::DIFFUSE, wird die Farbe diffuse statt der in der Image-Liste definierten Farbe verwendet.
Parameter
imlImage-Liste
nrNummer der Grafik innerhalb der Image-Liste
xX-Koordinate der Zielposition
yY-Koordinate der Zielposition
diffuseFarbwert, sofern die Diffuse Zeichenmethode verwendet wird. Bei allen anderen Zeichenmethoden wird der Parameter ignoriert.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0.
void ppl7::grafix::Drawable::draw ( const Sprite sprite,
int  nr,
int  x,
int  y 
)
void ppl7::grafix::Drawable::drawRect ( const Rect rect,
const Color c 
)
Beschreibung:
Diese Funktion zeichnet ein Rechteck an die gewünschte Position
Parameter
[in]rectKoordinaten des Rechtecks
[in]cFarbe des Rechtecks
void ppl7::grafix::Drawable::drawRect ( int  x1,
int  y1,
int  x2,
int  y2,
const Color c 
)
Beschreibung:
Diese Funktion zeichnet ein Rechteck an die gewünschte Position
Parameter
[in]x1X-Koordinate der oberen linken Ecke
[in]y1Y-Koordinate der oberen linken Ecke
[in]x2X-Koordinate der unteren rechten Ecke
[in]y2Y-Koordinate der unteren rechten Ecke
[in]cFarbe des Rechtecks
void ppl7::grafix::Drawable::elipse ( int  x,
int  y,
int  radx,
int  rady,
const Color c,
bool  fill = false 
)
void ppl7::grafix::Drawable::elipse ( int  x,
int  y,
int  radx,
int  rady,
const Color c,
bool  fill,
const Color fillcolor,
int  startangle,
int  endangle 
)
void ppl7::grafix::Drawable::fillRect ( const Rect rect,
const Color c 
)
Beschreibung:
Diese Funktion zeichnet ein ausgefülltes Rechteck in der Farbe c an die gewünschte Position
Parameter
[in]rectKoordinaten des Rechtecks
[in]cFarbe des Rechtecks
void ppl7::grafix::Drawable::fillRect ( int  x1,
int  y1,
int  x2,
int  y2,
const Color c 
)
Beschreibung:
Diese Funktion zeichnet ein ausgefülltes Rechteck in der Farbe c an die gewünschte Position
Parameter
[in]x1X-Koordinate der oberen linken Ecke
[in]y1Y-Koordinate der oberen linken Ecke
[in]x2X-Koordinate der unteren rechten Ecke
[in]y2Y-Koordinate der unteren rechten Ecke
[in]cFarbe des Rechtecks
int ppl7::grafix::Drawable::fitRect ( int &  x,
int &  y,
Rect r 
)
Beschreibung:
Diese Funktion prüft, ob das zu zeichnende Rechteck überhaupt in die aktuelle Zeichenfläche. Dabei wird das Quellrechteck bei Bedarf angepasst.
Parameter
[in,out]xX-Koordinate der Zielposition
[in,out]yY-Koordinate der Zielposition
[in,out]rQuell-Rechteck
Rückgabe
Die Funktion liefert 0 zurück, wenn das Rechteck komplett ausserhalb der Zeichenfläche liegt, oder 1, wenn es ganz oder zumindest teilweise innerhalb der Zeichenfläche liegt. In letzterem Fall werden die Koordinaten x, y und die Dimensionen des Rechtecks r so angepasst, dass durch die nachfolgende Blt-Funktion nur der sichtbare Bereich an die korrekte Position gezeichnet wird.
void ppl7::grafix::Drawable::floodFill ( int  x,
int  y,
const Color color,
const Color border 
)
Beschreibung:
Mit dieser Funktion kann eine beliebig geformte Fläche mit einer Farbe ausgefüllt werden.
Parameter
[in]xX-Koordinate eines beliebigen Punktes innerhalb der zu füllenden Fläche
[in]yY-Koordinate eines beliebigen Punktes innerhalb der zu füllenden Fläche
[in]colorFarbwert, mit der die Fläche gefüllt werden soll
[in]borderFarbwert, der die Grenze der zu füllenden Fläche darstellt
Bemerkungen
Die Funktion ruft sich selbst mehrfach rekursiv auf. Der Code wurde im wesentlichen aus der freien GD-Library, Version 1.2 entnommen
Portions copyright 1994, 1995, 1996, 1997, 1998, by Cold Spring
Harbor Laboratory. Funded under Grant P41-RR02188 by the National
Institutes of Health.
Portions copyright 1996, 1997, 1998, by Boutell.Com, Inc.
DRAWABLE_DATA * ppl7::grafix::Drawable::getData ( )
Beschreibung:
Diese Funktion liefert einen Pointer auf die Struktur DRAWABLE_DATA des Drawable zurück. Diese enthält alle Informationen des Drawable, wie den Speicherbereich der Grafik, Breite und Höhe, Bytes pro Zeile (pitch) und das Farbformat.
Rückgabe
Pointer auf die DRAWABLE_DATA Struktur des Drawable.
Drawable ppl7::grafix::Drawable::getDrawable ( ) const
Beschreibung:
Diese Funktion liefert eine Kopie dieses Drawable zurück.
Rückgabe
Kopie des Drawable
Drawable ppl7::grafix::Drawable::getDrawable ( const Rect rect) const
Beschreibung:
Diese Funktion erstellt ein neues Drawable Objekt anhand des angegebenen Ausschnitts rect.
Parameter
rectDer gewünschte Bildausschnitt
Rückgabe
Neues Drawable, das den gewünschten Ausschnitt repräsentiert
Drawable ppl7::grafix::Drawable::getDrawable ( const Point p,
const Size s 
) const
Drawable ppl7::grafix::Drawable::getDrawable ( int  x1,
int  y1,
int  x2,
int  y2 
) const
Beschreibung:
Diese Funktion erstellt ein neues Drawable Objekt anhand des angegebenen Koordinaten. Dabei ist zu beachten, dass der Ausschnitt inklusive der rechten unteren Ecke erstellt wird.
Parameter
x1X-Koordinate der linken oberen Ecke
y1Y-Koordinate der linken oberen Ecke
x2X-Koordinate der rechten unteren Ecke
y2Y-Koordinate der rechten unteren Ecke
Rückgabe
Neues Drawable, das den gewünschten Ausschnitt repräsentiert
GRAFIX_FUNCTIONS * ppl7::grafix::Drawable::getFunctions ( )
Beschreibung:
Diese Funktion liefert einen Pointer auf die Grafik-Funktionen für das Farbformat dieses Drawable zurück. Dieser kann NULL sein, wenn das Drawable noch nicht initialisiert wurde oder das angegebene Farbformat nicht unterstützt wird.
Rückgabe
Pointer auf eine GRAFIX_FUNCTIONS Struktur oder NULL. Es wird kein Fehlercode gesetzt.
Color ppl7::grafix::Drawable::getPixel ( int  x,
int  y 
) const
Color ppl7::grafix::Drawable::getPixel ( const Point p) const
int ppl7::grafix::Drawable::height ( ) const
Beschreibung:
Diese Funktion liefert die Höhe der Grafik in Pixel zurück.
Rückgabe
Höhe in Pixel
void ppl7::grafix::Drawable::initFunctions ( const RGBFormat format)
private
Beschreibung:
Diese private Funktion wird intern bei der Erstellung des Drawable aufgerufen, um die farbformatabhängigen Grafik-Funktionen zu initialisieren.
Parameter
formatDas gewünschte Farbformat
Ausnahmebehandlung
NoGrafixEngineExceptionDie Grafikengine ist nicht initialisiert
void ppl7::grafix::Drawable::invert ( const Rect rect,
const Color color1,
const Color color2 
)
Beschreibung:
Mit dieser Funktion werden sämtliche Pixel innerhalb eines Rechtecks, die der Farbe color1 entsprechen, durch color2 ersetzt, und alle Farben mit dem Farbwert color2 werden durch color1 ersetzt.
Parameter
[in]rectKoordinaten des Rechtecks
[in]color1Erste Farbe
[in]color2Zweite Farbe
bool ppl7::grafix::Drawable::isEmpty ( ) const
Beschreibung:
Mit dieser Funktion kann geprüft werden, ob das Drawable eine gültige und somit nutzbare Grafik enthält. Dies ist der Fall, wenn eine Basisadresse vorhanden ist, die Grafik eine Höhe und Breite größer 0 und ein gültiges Farbformat enthält.
Rückgabe
Liefert true zurück, wenn das Drawable eine gültige Grafik enthält, andernfalls false.
void ppl7::grafix::Drawable::line ( int  x1,
int  y1,
int  x2,
int  y2,
const Color c 
)
void ppl7::grafix::Drawable::line ( const Point start,
const Point end,
const Color c 
)
void ppl7::grafix::Drawable::lineAA ( int  x1,
int  y1,
int  x2,
int  y2,
const Color c,
int  strength = 1 
)
void ppl7::grafix::Drawable::lineAA ( const Point start,
const Point end,
const Color c,
int  strength = 1 
)
void ppl7::grafix::Drawable::negativ ( const Rect rect)
Beschreibung:
Mit dieser Funktion werden sämtliche Pixel innerhalb eines Rechtecks durch ihren negativen Wert ersetzt.
Parameter
[in]rectKoordinaten des Rechtecks
Drawable & ppl7::grafix::Drawable::operator= ( const Drawable other)
Beschreibung:
Mit diesem Operator wird eine Kopie eines anderen Drawable erstellt.
Parameter
otherAnderes Drawable
Rückgabe
Referenz auf das neue Drawable
int ppl7::grafix::Drawable::pitch ( ) const
Beschreibung:
Mit dieser Funktion kann abgefragt werden, wieviele Bytes eine Grafikzeile benötigt. Dies muss nicht unbedingt das Ergebnis von Breite mal BytesProPixel sein, sondern kann auch mehr sein, z.B. wenn das Drawable nur einen Ausschnitt aus einer größeren Grafik enthält.
Rückgabe
Bytes pro Grafikzeile
void ppl7::grafix::Drawable::print ( const Font font,
int  x,
int  y,
const String text 
)
void ppl7::grafix::Drawable::print ( const Font font,
int  x,
int  y,
const WideString text 
)
Beschreibung:
Mit dieser Funktion wird der Text text auf der Grafik an den Koordinaten x und y unter Verwendeung des Fonts font ausgegeben.
Parameter
fontZu verwendende Font-Parameter
xX-Koordinate
yY-Koordinate
textDer auszugebende Text
void ppl7::grafix::Drawable::printf ( const Font font,
int  x,
int  y,
const char *  fmt,
  ... 
)
Beschreibung:
Mit dieser Funktion wird zunächst ein Text anhand des Formatstrings fmt erstellt und dann auf der Grafik an den Koordinaten x und y unter Verwendeung des Fonts font ausgegeben.
Parameter
fontZu verwendende Font-Parameter
xX-Koordinate
yY-Koordinate
fmtFormatstring
...optionale Parameter für den Formatstring
void ppl7::grafix::Drawable::putPixel ( int  x,
int  y,
const Color c 
)
void ppl7::grafix::Drawable::putPixel ( const Point p,
const Color c 
)
Rect ppl7::grafix::Drawable::rect ( ) const
Beschreibung:
Dieser Funktion liefert das Rechteck des Drawable zurück. Die Koordinaten des Rechtecks sind immer 0/0, Breite und Höhe sind die des Drawable.
Rückgabe
Ein Objekt von Typ Rect.
SurfaceColor ppl7::grafix::Drawable::rgb ( const Color c) const
Beschreibung:
Mit dieser Funktion wird eine farbformat unabhängige Farbe c in einen format spezifischen Wert umgerechnet.
Parameter
cFarbe
Rückgabe
Farbwert
SurfaceColor ppl7::grafix::Drawable::rgb ( int  r,
int  g,
int  b,
int  alpha 
) const
Beschreibung:
Mit dieser Funktion wird eine farbformat unabhängige Farbe mit den Komponenten rot, grün, blau und Transparenz in einen format spezifischen Wert umgerechnet.
Parameter
rrot-Wert
ggrün-Wert
bblau-Wert
alphaTransparenz
Rückgabe
Farbwert
RGBFormat ppl7::grafix::Drawable::rgbformat ( ) const
Beschreibung:
Diese Funktion liefert das Farbformat des Drawable zurück.
Rückgabe
Farbformat
void ppl7::grafix::Drawable::scale ( Image tgt,
int  width,
int  height,
bool  keepAspectRation = true,
bool  smoothTransform = false 
)
Image ppl7::grafix::Drawable::scaled ( int  width,
int  height,
bool  keepAspectRation = true,
bool  smoothTransform = false 
)
Size ppl7::grafix::Drawable::size ( ) const
Beschreibung:
Diese Funktion liefert Breite und Höhe des Drawable in einem Size-Objekt zurück.
Rückgabe
Objekt von Typ Size.
int ppl7::grafix::Drawable::width ( ) const
Beschreibung:
Diese Funktion liefert die Breite der Grafik in Pixel zurück.
Rückgabe
Breite in Pixel
void ppl7::grafix::Drawable::xchange ( const Rect rect,
const Color color,
const Color replace 
)
Beschreibung:
Mit dieser Funktion werden sämtliche Pixel innerhalb eines Rechtecks, die der Farbe color entsprechen, durch die Ersatzfarbe replace ersetzt
Parameter
[in]rectKoordinaten des Rechtecks
colorAlte Farbe
replaceNeu Farbe

Freundbeziehungen und Funktionsdokumentation

friend class Image
friend

Dokumentation der Datenelemente

DRAWABLE_DATA ppl7::grafix::Drawable::data
private
GRAFIX_FUNCTIONS* ppl7::grafix::Drawable::fn
private

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: