App

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
app::TBitmap< TPIXEL, TCHANNEL > Class Template Reference

Třída pro reprezentaci bitmapy. More...

`#include <TBitmap.hpp>`

## Public Member Functions
| 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.

## Static Public Attributes
static const unsigned int | chCount = sizeof(TPIXEL) / sizeof(TCHANNEL)
| Počet kanálů.
static const TCHANNEL | maxVal = ~0
| Maximální hodnota kanálu.

## Protected Attributes
ColorMode | type
| Definuje typ bitmapy.
TPIXEL * | data
| Ukazuje na obrazová data v paměti, ty jsou zapsaná po řádcích v souvislé oblasti.
unsigned int | width
| Šířka bitmapy v pixelech.
unsigned int | height
| Výška bitmapy v pixelech.
unsigned int | bpp
| Počet Bajtů na pixel.
int | premultiplied
| Informace o tom, zda jsou jednotlivé kanály přednásobeny alphou.
int | ownsData
| Informace, jestli bitmapa vlastní svoje data. Bitmapa nevlastní svoje data, pokud si je sama nealokovala a nemůže je tedy uvolnit.

## Detailed Description

### 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.

## Constructor & Destructor Documentation

template<typename TPIXEL, typename TCHANNEL>

app::TBitmap< TPIXEL, TCHANNEL >::TBitmap | ( |  | ) |
| inline

Defaultní konstruktor, vytvoří neplatnou bitmapu.

Definition at line 82 of file TBitmap.hpp.

{
type = INVALID_COLOR_MODE;
data = NULL;
width = 0;
height = 0;
bpp = 0;
premultiplied = 0;
ownsData = 0;
}
template<typename TPIXEL, typename TCHANNEL>

app::TBitmap< TPIXEL, TCHANNEL >::TBitmap | ( | unsigned int | width,
|  | unsigned int | height,
|  | ColorMode | type,
|  | int | premultiplied
| ) |  |
| inline

Konstruktor.

Konstruktor pro tvorbu bitmapy.

Parameters

  width | Šířka bitmapy.
  height | Výška bitmapy.
  type | Mód bitmapy, používaný barevný prostor.
  premultiplied | Informace o tom, jestli jsou kanály bitmapy přednásobeny alphou.

Definition at line 100 of file TBitmap.hpp.

{
data = NULL;
unsigned long int size = width * height;
if (size > 0) {
data = (TPIXEL *) malloc((unsigned long int)(size * sizeof(TPIXEL))); // ANDROID_SPECIFIC Přetypování na unsigned long int kvůli Eclipse a androidu
}
if (data != NULL) {
this->type = type;
this->width = width;
this->height = height;
bpp = sizeof(TPIXEL);
this->premultiplied = premultiplied;
ownsData = 1;
} else {
this->type = INVALID_COLOR_MODE;
data = NULL;
this->width = 0;
this->height = 0;
bpp = 0;
this->premultiplied = 0;
ownsData = 0;
}
}
template<typename TPIXEL, typename TCHANNEL>

app::TBitmap< TPIXEL, TCHANNEL >::TBitmap | ( | void * | data,
|  | unsigned | width,
|  | unsigned | height,
|  | ColorMode | type,
|  | int | premultiplied
| ) |  |
| inline

Vytvoří bitmapu nad oblastí dat v paměti.

Vytvoří bitmapu nad oblastí dat v paměti. Slouží k přístupu k datům třídy PDBitmap na straně Javy.

Parameters

  data | Ukazatel na začátek oblasti.
  width | Šířka bitmapy.
  height | Výška bitmapy
  type | Mód bitmapy, používaný barevný prostor.
  premultiplied | Informace o tom, jestli je bitmapa přednásobena alphou.

Definition at line 133 of file TBitmap.hpp.

{
if (data != NULL && width > 0 && height > 0) {
this->type = type;
this->width = width;
this->height = height;
bpp = sizeof(TPIXEL);
this->premultiplied = premultiplied;
ownsData = 0;
this->data = (TPIXEL *) data;
} else {
this->type = INVALID_COLOR_MODE;
data = NULL;
this->width = 0;
this->height = 0;
bpp = 0;
this->premultiplied = 0;
ownsData = 0;
}
}
template<typename TPIXEL, typename TCHANNEL>

app::TBitmap< TPIXEL, TCHANNEL >::TBitmap | ( | TBitmap< TPIXEL, TCHANNEL > & | other | ) |
| inline

Kopírovací konstuktor, provede hlubokou kopii.

Definition at line 155 of file TBitmap.hpp.

{
type = other.type;
width = other.width;
height = other.height;
bpp = other.bpp;
premultiplied = other.premultiplied;
if (other.data != NULL) { // raději jak neplatný typ, že se jedná o stejnou bitmapu je dáno template
int size = width * height * sizeof(TPIXEL);
data = (TPIXEL *) malloc(size);
if (data != NULL) {
memcpy(data, other.data, size);
ownsData = 1;
} else {
type = INVALID_COLOR_MODE;
ownsData = 0;
}
} else {
data = NULL;
ownsData = 0;
}
}
template<typename TPIXEL , typename TCHANNEL >

TBitmap< TPIXEL, TCHANNEL >::~TBitmap | ( |  | ) |
| virtual

Destruktor.

Definition at line 41 of file TBitmap.cpp.

{
if (ownsData && (data != NULL)) {
free(data);
}
}

## Member Function Documentation

template<typename TPIXEL, typename TCHANNEL>

int app::TBitmap< TPIXEL, TCHANNEL >::clear | ( |  | ) |
| inline

Vyplní celou oblast nulami.

Definition at line 271 of file TBitmap.hpp.

{
if (data != NULL) {
memset(data, 0, width * height * bpp);
return 0;
}
return 1;
}
template<typename TPIXEL , typename TCHANNEL >

int TBitmap< TPIXEL, TCHANNEL >::copyTo | ( | TBitmap< TPIXEL, TCHANNEL > & | dst,
|  | Rect | srcRect,
|  | Point | srcOrig
| ) |  | const
| virtual

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.

{
if (data == NULL) {
return 1;
}
if (dst.getData() == NULL) {
return 2;
}
if (type != dst.getType()) {
return 3;
}
PointerArea srcArea = PointerArea(data, getRect(), srcRect, bpp);
PointerArea dstArea = dst.getPointerArea();
int err = PointerArea::copy(dstArea, srcArea, srcOrig);
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.

{
if (!premultiplied) {
return 1;
}
if (chCount != 4) {
return 2;
}
if (data == NULL) {
return 3;
}
TCHANNEL * ptr = (TCHANNEL *) data;
TCHANNEL * ptrEnd = (TCHANNEL *) (data + width * height);
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.

{
if (data == NULL) {
return NULL;
}
if (other.getType() != type || other.getData() == NULL) {
return NULL;
}
TBitmap<TPIXEL, TCHANNEL> * res = new TBitmap<TPIXEL, TCHANNEL>(width, height, type, premultiplied);
TCHANNEL * s1 = (TCHANNEL *) data;
TCHANNEL * s2 = (TCHANNEL *) other.getData();
TCHANNEL * d = (TCHANNEL *) res->getData();
TCHANNEL * s1End = (TCHANNEL *) (data + width * height);
TCHANNEL minVal = 0;
TCHANNEL maxVal = ~minVal; // 111...111
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.

{
if (data == NULL) {
return 1;
}
PointerArea dstArea = PointerArea(data, getRect(), area, bpp);
int err = PointerArea::fill(dstArea, src);
if (err) {
return 100 + err;
} else {
return 0;
}
}
template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::getBpp | ( |  | ) | const
| inline

Vrací počet Bajtů na pixel.

Definition at line 196 of file TBitmap.hpp.

{return bpp;}
template<typename TPIXEL , typename TCHANNEL >

TBitmap< TCHANNEL, TCHANNEL > * TBitmap< TPIXEL, TCHANNEL >::getChannel | ( | unsigned | index | ) | const
| virtual

Extrahuje požadovaný kanál.

Extrahuje požadovaný kanál, který vrátí jako novou jednokanálovou bitmapu.

Parameters

  ch | Požadovaný kanál.

Returns
  Jednokanálová bitmapa tvořená požadovaným kanálem, v případě neúspěchu NULL.

Definition at line 14 of file TBitmap.cpp.

{
if (data == NULL) {
return NULL;
}
if (index >= chCount) {
return NULL;
}
TBitmap<TCHANNEL, TCHANNEL> * res = new TBitmap<TCHANNEL, TCHANNEL>(width, height, MONO, premultiplied);
if (res->getData() == NULL) {
delete res;
return NULL;
}
TCHANNEL * s = (TCHANNEL *) data + index;
TCHANNEL * end = (TCHANNEL *) (data + width * height);
TCHANNEL * d = res->getData();
while (s < end) {
*d = *s;
s += 4;
d++;
}
return res;
}
template<typename TPIXEL, typename TCHANNEL>

TPIXEL* app::TBitmap< TPIXEL, TCHANNEL >::getData | ( |  | ) | const
| inline

Vrací pointer na data bitmapy.

Definition at line 187 of file TBitmap.hpp.

{return data;}
template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::getHeight | ( |  | ) | const
| inline

Vrací výšku bitmapy v pixelech.

Definition at line 193 of file TBitmap.hpp.

{return height;}
template<typename TPIXEL, typename TCHANNEL>

PointerArea app::TBitmap< TPIXEL, TCHANNEL >::getPointerArea | ( |  | ) | const
| inline

Vrací instanci PointerArea, která odpovídá oblasti v paměti, kde je uložená bitmapa.

Definition at line 206 of file TBitmap.hpp.

{return PointerArea(data, getRect(), bpp);}
template<typename TPIXEL, typename TCHANNEL>

Rect app::TBitmap< TPIXEL, TCHANNEL >::getRect | ( |  | ) | const
| inline

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.

{return Rect(0, 0, width, height);}
template<typename TPIXEL, typename TCHANNEL>

ColorMode app::TBitmap< TPIXEL, TCHANNEL >::getType | ( |  | ) | const
| inline

Vrací typ bitmapy.

Definition at line 181 of file TBitmap.hpp.

{return type;}
template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::getWidth | ( |  | ) | const
| inline

Vrací šířku bitmapy v pixelech.

Definition at line 190 of file TBitmap.hpp.

{return width;}
template<typename TPIXEL, typename TCHANNEL>

int app::TBitmap< TPIXEL, TCHANNEL >::isPremultiplied | ( |  | ) |
| inline

Vrací, jeslti je bitmapa přednásobena alphou.

Definition at line 209 of file TBitmap.hpp.

{ return premultiplied; }
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.

{
if (premultiplied) {
return 1;
}
if (chCount != 4) {
return 2;
}
if (data == NULL) {
return 3;
}
TCHANNEL * ptr = (TCHANNEL *) data;
TCHANNEL * ptrEnd = (TCHANNEL *) (data + width * height);
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++;
}
premultiplied = 1;
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

  premultiplied |

Definition at line 216 of file TBitmap.hpp.

{ this->premultiplied = premultiplied; }
template<typename TPIXEL, typename TCHANNEL>

void app::TBitmap< TPIXEL, TCHANNEL >::setType | ( | ColorMode | mode | ) |
| inline

Nastaví typ bitmapy.

Definition at line 184 of file TBitmap.hpp.

{type = mode;}

## Member Data Documentation

template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::bpp
| protected

Počet Bajtů na pixel.

Definition at line 72 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

const unsigned TBitmap< TPIXEL, TCHANNEL >::chCount = sizeof(TPIXEL) / sizeof(TCHANNEL)
| static

Počet kanálů.

Definition at line 78 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

TPIXEL* app::TBitmap< TPIXEL, TCHANNEL >::data
| protected

Ukazuje na obrazová data v paměti, ty jsou zapsaná po řádcích v souvislé oblasti.

Definition at line 69 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::height
| protected

Výška bitmapy v pixelech.

Definition at line 71 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

const TCHANNEL TBitmap< TPIXEL, TCHANNEL >::maxVal = ~0
| static

Maximální hodnota kanálu.

Definition at line 79 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

int app::TBitmap< TPIXEL, TCHANNEL >::ownsData
| protected

Informace, jestli bitmapa vlastní svoje data. Bitmapa nevlastní svoje data, pokud si je sama nealokovala a nemůže je tedy uvolnit.

Definition at line 74 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

int app::TBitmap< TPIXEL, TCHANNEL >::premultiplied
| protected

Informace o tom, zda jsou jednotlivé kanály přednásobeny alphou.

Definition at line 73 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

ColorMode app::TBitmap< TPIXEL, TCHANNEL >::type
| protected

Definuje typ bitmapy.

Definition at line 68 of file TBitmap.hpp.

template<typename TPIXEL, typename TCHANNEL>

unsigned int app::TBitmap< TPIXEL, TCHANNEL >::width
| protected

Šířka bitmapy v pixelech.

Definition at line 70 of file TBitmap.hpp.

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

- /home/xxx/eclipse_workspaces/app/appcore/jni/app/bitmaps/TBitmap.hpp
- /home/xxx/eclipse_workspaces/app/appcore/jni/app/bitmaps/TBitmap.cpp