App
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
app::TBrushGenerator Class Reference

Třída slouží ke generování jednokanálových bitmap pro štětce. More...

#include <TBrushGenerator.hpp>

Public Member Functions

 ~TBrushGenerator ()
 

Static Public Member Functions

template<typename TPIXEL , typename TCHANNEL >
static TBitmap< TPIXEL,
TCHANNEL > * 
createRoundBrush (unsigned size, double hardness)
 Vygeneruje jednokanálovou bitmapu odpovidajícího typu, která odpovídá kulatému štětci o zadané velikosti a tvrdosti.
 
template<typename TPIXEL , typename TCHANNEL >
static int createRoundBrushIn (TBitmap< TPIXEL, TCHANNEL > &dst, unsigned size, double hardness)
 Vytvoří štětec uprostřed zadané bitmapy. Kromě obdélníku štětce tato zůstává beze změn.
 

Protected Member Functions

 TBrushGenerator ()
 Defaultní konstruktor, třída je pouze statická
 

Detailed Description

Třída slouží ke generování jednokanálových bitmap pro štětce.

Definition at line 32 of file TBrushGenerator.hpp.

Constructor & Destructor Documentation

app::TBrushGenerator::TBrushGenerator ( )
inlineprotected

Defaultní konstruktor, třída je pouze statická

Definition at line 35 of file TBrushGenerator.hpp.

{}
app::TBrushGenerator::~TBrushGenerator ( )
inline

Definition at line 39 of file TBrushGenerator.hpp.

{}

Member Function Documentation

template<typename TPIXEL , typename TCHANNEL >
TBitmap< TPIXEL, TCHANNEL > * app::TBrushGenerator::createRoundBrush ( unsigned  size,
double  hardness 
)
static

Vygeneruje jednokanálovou bitmapu odpovidajícího typu, která odpovídá kulatému štětci o zadané velikosti a tvrdosti.

Parameters
sizeVelikost štětce - je rovna výšce a šířce bitmapy štětce.
hardnessTvrdost v rozsahu 0..1. Určuje v jakém bodě začne štětec lineárně měknout ke kraji.
Returns
Vrací bitmapu, případně NULL, pokud se ji nepodařilo alokovat či požadovaný typ není jednokanálový.

Definition at line 14 of file TBrushGenerator.cpp.

{
if (retVal == NULL) {
return NULL;
}
if (retVal->getData() == NULL) {
delete retVal;
return NULL;
}
if (retVal->chCount != 1) {
delete retVal;
return NULL;
}
TPIXEL maxVal = retVal->maxVal;
if (size == 1) {
retVal->fill(retVal->getRect(), &maxVal);
return retVal;
}
double r = size / 2.0;
double rFull = r * hardness;
double r2 = r * r;
double rFull2 = rFull * rFull;
double factor = maxVal / (r - rFull);
double minX = -r + 0.5; // Ptz zjistujeme, jestli stred lezi v dane kruznici
double minY = -r + 0.5;
double x = minX;
double y = minY;
PointerArea area = retVal->getPointerArea();
TPIXEL * ptr = (TPIXEL *) area.getAreaBgn();
TPIXEL * ptrRowEnd = (TPIXEL *) area.getAreaRowEnd();
TPIXEL * ptrEnd = (TPIXEL *) area.getAreaEnd();
unsigned ptrWidth = area.getOrigWidth();
while (ptr < ptrEnd) {
x = minX;
while(ptr < ptrRowEnd) {
double rr2 = x * x + y * y;
if (rr2 < rFull2) {
*ptr = maxVal;
} else if (rr2 < r2) {
*ptr = factor * (r - sqrt(rr2)) + 0.5;
} else {
*ptr = 0;
}
ptr++;
x += 1;
}
y += 1;
ptrRowEnd += ptrWidth;
}
return retVal;
}
template<typename TPIXEL , typename TCHANNEL >
int app::TBrushGenerator::createRoundBrushIn ( TBitmap< TPIXEL, TCHANNEL > &  dst,
unsigned  size,
double  hardness 
)
static

Vytvoří štětec uprostřed zadané bitmapy. Kromě obdélníku štětce tato zůstává beze změn.

Vytvoří štětec uprostřed zadané bitmapy. Kromě obdélníku štětce tato zůstává beze změn. Štětec je vytvořen v dočasné bitmapě a poté zkopírován, je zde pro usnadnění volání ze strany Javy.

Současná implementace je značně neefektivnípro velké štětce, díky kopii, Na emulátoru je znatelné pro měkké štětce větší než cca 650.

Parameters
dstCílová bitmapa.
sizeVelikost štětce.
hardnessTvrdost štětce.
Returns
Vrací 0 v případě úspěchu, jinak kód chyby.

Definition at line 69 of file TBrushGenerator.cpp.

{
TBitmap<TPIXEL, TCHANNEL> * tmp = createRoundBrush<TPIXEL, TCHANNEL>(size, hardness);
if (tmp == NULL) {
return 1;
}
// Bez přetypování je pproblém s přetečením proměnných, výsledný Point má pak souřadnice 245xxxxxxxxx velké číslo místo záporného
return tmp->copyTo(dst, tmp->getRect(), Point(((int)dst.getWidth() - (int)tmp->getWidth()) / 2, ((int)dst.getHeight() - (int)tmp->getHeight()) / 2));
}

The documentation for this class was generated from the following files: