|
| TBitmap () |
| Defaultní konstruktor, vytvoří neplatnou bitmapu.
|
|
| TBitmap (unsigned int width, unsigned int height, ColorMode type, int premultiplied) |
| Konstruktor.
|
|
| TBitmap (void *data, unsigned width, unsigned height, ColorMode type, int premultiplied) |
| Vytvoří bitmapu nad oblastí dat v paměti.
|
|
| TBitmap (TBitmap< TPIXEL, TCHANNEL > &other) |
| Kopírovací konstuktor, provede hlubokou kopii.
|
|
virtual | ~TBitmap () |
| Destruktor.
|
|
ColorMode | getType () const |
| Vrací typ bitmapy.
|
|
void | setType (ColorMode mode) |
| Nastaví typ bitmapy.
|
|
TPIXEL * | getData () const |
| Vrací pointer na data bitmapy.
|
|
unsigned int | getWidth () const |
| Vrací šířku bitmapy v pixelech.
|
|
unsigned int | getHeight () const |
| Vrací výšku bitmapy v pixelech.
|
|
unsigned int | getBpp () const |
| Vrací počet Bajtů na pixel.
|
|
Rect | getRect () const |
| Vrací obdélník odpovídající rozměrům bitmapy s počátkem v 0.
|
|
PointerArea | getPointerArea () const |
| Vrací instanci PointerArea, která odpovídá oblasti v paměti, kde je uložená bitmapa.
|
|
int | isPremultiplied () |
| Vrací, jeslti je bitmapa přednásobena alphou.
|
|
void | setPremultiplied (int premultiplied) |
| Nastaví, zda je bitmapa přednásobena alphou.
|
|
virtual int | premultiply () |
| Přednásobí hodnoty kanálů alphou, pokud je aplikovatelné.
|
|
virtual int | demultiply () |
| Odstraní přednásobení kanálů alphou, pokud lze provést.
|
|
virtual TBitmap< TCHANNEL,
TCHANNEL > * | getChannel (unsigned index) const |
| Extrahuje požadovaný kanál.
|
|
virtual int | copyTo (TBitmap< TPIXEL, TCHANNEL > &dst, Rect srcRect, Point srcOrig) const |
| Zkopíruje data z bitmapy do cílové bitmapy bez převzorkování.
|
|
virtual int | fill (Rect area, TPIXEL *src) |
| Vyplní oblast bitmapy konstantní hodnotou.
|
|
int | clear () |
| Vyplní celou oblast nulami.
|
|
virtual TBitmap< TPIXEL,
TCHANNEL > * | difference (TBitmap< TPIXEL, TCHANNEL > &other, int proportional=0) const |
| Debug metoda.
|
|
template<typename TPIXEL, typename TCHANNEL>
class app::TBitmap< TPIXEL, TCHANNEL >
Třída pro reprezentaci bitmapy.
Třída pro reprezentaci bitmapy. Parametrizovatelná tak, že zvládne reprezentovat více barevných hloubek. Není úplně optimální, protože nezvládne více jak 16bitů na kanál pro RGBA bitmapu. Vyšší bitová hloubka nelze vzhledem k interpolátorům a blendingu použít, ale vzhledem k tomu, že i RAW formát má 12 - 14 bitů na kanál, 16 bitů na kanál je dostačující. 16 bitů na kanál není zatím podporováno, ale lze na ni snadno rozšířit.
- Template Parameters
-
TPIXEL | - celočíselný typ reprezentující celý pixel - přípustné jsou px_4x8bit a px_1x8bit |
TCHANNEL | - celočíselný typ reprezentující jeden kanál - přípustné je pouze px_1x8bit |
Definition at line 66 of file TBitmap.hpp.
template<typename TPIXEL , typename TCHANNEL >
Zkopíruje data z bitmapy do cílové bitmapy bez převzorkování.
Zkopíruje vybranou oblast z bitmapy do cílové bitmapy bez převzorkování. Kopírovaná oblast je určena obdélníkem srcRect (ss této bitmapy, body určené pravou a dolní maximální souřadnicí se již nekopírují). Pozice kam se data kopírují je určena bodem srcOrig, který určuje, kam se v ss cílové bítmapy má umístit kopírovaná oblast.
Je možné zadat požadavek na kopírování takový, že by se mělo kopírovat z / mimo platnou oblast Bitmapy. V tom případě budou oblasti adekvátně ořezány, aby se kopírovala pouze platná data do platné oblasti.
- Parameters
-
dst | Cílová bitmapa. |
srcRect | Obdélník určující vybranou oblast, která se bude kopírovat. |
srcOrig | Bod určující cílovou oblast, kam se bude kopírovat. |
- Returns
- Vrací 0 při úspěchu, jinak kód chyby.
Definition at line 110 of file TBitmap.cpp.
{
return 1;
}
if (dst.getData() == NULL) {
return 2;
}
if (
type != dst.getType()) {
return 3;
}
PointerArea dstArea = dst.getPointerArea();
if (err) {
return 100 + err;
} else {
return 0;
}
}
template<typename TPIXEL , typename TCHANNEL >
int TBitmap< TPIXEL, TCHANNEL >::demultiply |
( |
| ) |
|
|
virtual |
Odstraní přednásobení kanálů alphou, pokud lze provést.
Odstraní přednásobení kanálů alphou, pokud lze provést. Pokud se jendíá o jednokanálovou bitmapu nebo je bitmapa vedená jako nepřednásobená, neprovede se nic.
- Returns
- Vrací 0 v případě úspěchu, jinak kód chyby.
Definition at line 76 of file TBitmap.cpp.
{
return 1;
}
return 2;
}
return 3;
}
TCHANNEL * ptr = (TCHANNEL *)
data;
TCHANNEL tmp;
double alpha;
while (ptr < ptrEnd) {
tmp = *(ptr + 3);
if (tmp == 0) {
ptr += 4;
continue;
}
alpha = tmp / (double)
maxVal;
*ptr = *ptr / alpha + 0.5;
ptr++;
*ptr = *ptr / alpha + 0.5;
ptr++;
*ptr = *ptr / alpha + 0.5;
ptr++;
ptr++;
}
return 0;
}
template<typename TPIXEL , typename TCHANNEL >
TBitmap< TPIXEL, TCHANNEL > * TBitmap< TPIXEL, TCHANNEL >::difference |
( |
TBitmap< TPIXEL, TCHANNEL > & |
other, |
|
|
int |
proportional = 0 |
|
) |
| const |
|
virtual |
Debug metoda.
Debug metoda, která vrací bitmapu, jejíž kanály odpovídají absolutní hodnotě rozdílu této a porovnávané bitmapy.
Výsledky mohou být buď proporcionální (kanál se ZHASNE) nebo neproporcionální - kanál se ZHASNE úplně, zhasínání oproti předchozí implementaci zvoleno kvůli porovnávání alphy, pokud by se rovnala, byl by pixel neviditelný, což je špatně... Holt se na to bude hůř koukat... Alternativně dostat mimo třídu a implementovat pro jednotlivé bitmapy, ale jde jen o debug
- Parameters
-
other | Bitmapa k porovnání. |
proportional | požadavek na proporcionální zobrazení rozdílu. |
- Returns
- Vrací rozdílovou bitmapu.
Definition at line 144 of file TBitmap.cpp.
{
return NULL;
}
if (other.getType() !=
type || other.getData() == NULL) {
return NULL;
}
TCHANNEL * s1 = (TCHANNEL *)
data;
TCHANNEL * s2 = (TCHANNEL *) other.getData();
TCHANNEL * d = (TCHANNEL *) res->getData();
TCHANNEL * s1End = (TCHANNEL *) (
data + width * height);
TCHANNEL minVal = 0;
if (!proportional) {
while (s1 < s1End) {
*d = (*s1 == *s2) ? maxVal : minVal;
s1++;
s2++;
d++;
}
} else {
while (s1 < s1End) {
*d = abs(*s1 - *s2);
s1++;
s2++;
d++;
}
}
return res;
}
template<typename TPIXEL , typename TCHANNEL >
int TBitmap< TPIXEL, TCHANNEL >::fill |
( |
Rect |
area, |
|
|
TPIXEL * |
src |
|
) |
| |
|
virtual |
Vyplní oblast bitmapy konstantní hodnotou.
Vyplní oblast bitmapy konstantní hodnotou. Hodnota představuje pixel typu, který odpovídá této bitmapě.
- Parameters
-
area | Oblast, která má být vyplněna. |
src | Data, která se mají k vyplnění použít. |
- Returns
- Vrací 0 při úspěchu, v opačném případě kód chyby.
Definition at line 130 of file TBitmap.cpp.
{
return 1;
}
if (err) {
return 100 + err;
} else {
return 0;
}
}
template<typename TPIXEL, typename TCHANNEL>
Vrací obdélník odpovídající rozměrům bitmapy s počátkem v 0.
Vrací obdélník mezi body (0, 0) a (width, height)
- Returns
- Obdélník reprezentující bitmapu.
Definition at line 203 of file TBitmap.hpp.
template<typename TPIXEL , typename TCHANNEL >
int TBitmap< TPIXEL, TCHANNEL >::premultiply |
( |
| ) |
|
|
virtual |
Přednásobí hodnoty kanálů alphou, pokud je aplikovatelné.
Přednásobí hodnoty kanálů alphou, pokud je aplikovatelné. Pokud se jedná o jednokanálovou bitmapu nebo je již bitmapa vedená jako přednásobená, neprovede nic.
- Returns
- Vrací 0 v případě úspěchu, jinak kód chyby.
Definition at line 48 of file TBitmap.cpp.
{
return 1;
}
return 2;
}
return 3;
}
TCHANNEL * ptr = (TCHANNEL *)
data;
double alpha;
while (ptr < ptrEnd) {
alpha = *(ptr + 3) / (
double)
maxVal;
*ptr = *ptr * alpha + 0.5;
ptr++;
*ptr = *ptr * alpha + 0.5;
ptr++;
*ptr = *ptr * alpha + 0.5;
ptr++;
ptr++;
}
return 0;
}
template<typename TPIXEL, typename TCHANNEL>
void app::TBitmap< TPIXEL, TCHANNEL >::setPremultiplied |
( |
int |
premultiplied | ) |
|
|
inline |
Nastaví, zda je bitmapa přednásobena alphou.
Nastaví, zda je bitmapa přednásobena alphou, nezávisle na tom, jeslti skutečně je.
- Parameters
-
Definition at line 216 of file TBitmap.hpp.