App

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

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

Public Member Functions | Static Public Member Functions | Public Attributes | Private Attributes | List of all members
app::PointerArea Class Reference

Třída pro práci s nízkoúrovňovou reprezentací bitmapy v paměti. Třída pro práci s nízkoúrovňovou reprezentací bitmapy v paměti - dvourozměrné pole pixelů uložené jako souvislý blok dat. More...

`#include <PointerArea.hpp>`

## Public Member Functions
| PointerArea (void *pStart, Rect origDim, unsigned int bpp)
| Vytvoří oblast o daných parametrech.
| PointerArea (void *pStart, Rect origDim, Rect areaDim, unsigned int bpp)
| Vytvoří oblast o daných parametrech.
| PointerArea (const PointerArea &other)
| Kopírovací konstruktor, kvůli konstantnímu bpp.
Rect | getOrig () const
| Vrací obdélník představující původní oblast.
Rect | getArea () const
| Vrací obdélník reprezentující vybranou oblast.
unsigned int | getAreaWidth () const
| Vrací šířku vybrané oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).
unsigned int | getOrigWidth () const
| Vrací šířku původní oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).
unsigned int | getAreaHeight () const
| Vrací výšku vybrané oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).
unsigned int | getOrigHeight () const
| Vrací výšku původní oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).
unsigned int | getAreaByteWidth () const
| Vrací šířku vybrané oblasti v bajtech.
unsigned int | getOrigByteWidth () const
| Vrací šířku původní oblasti v bajtech.
unsigned int | getOrigSize () const
| Vrací velikost původní oblasti v bajtech.
unsigned int | getAreaSize () const
| Vrací velikost dat ve vybrané oblasti v bajtech.
unsigned int | getByteOffset () const
| Vrací offset řádků vybrané oblasti vzhledem k původní v bajtech.
unsigned int | getOffset () const
| Vrací offset řádků vybrané oblasti vzhledem k původní v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).
void * | getOrigBgn () const
| Vrací pointer na počátek původní oblasti.
void * | getAreaBgn () const
| Vrací pointer na počátek vybrané oblasti.
void * | getAreaRowEnd () const
| Vrací pointer na první prvek za posledním prvkem v prvním řádku vybrané oblasti.
void * | getOrigEnd () const
| Vrací pointer ukazujici na první prvek za původní oblastí oblastí.
void * | getOrigRowEnd () const
| Vrací pointer na první prvek za posledním prvkem v prvním řádku (tedy na první (nultý) prvek druhého řádku).
void * | getAreaEnd () const
| Vrací pointer ukazujici na první prvek za oblastí oblastí.

## Static Public Member Functions
static int | makeCommon (PointerArea &dst, PointerArea &src, Point srcOrig)
| Upraví oblasti tak, aby obě obsahovali pouze "společnou část" (průnik) se zadaným posunutím.
static int | makeCommon (PointerArea &dst, PointerArea &src1, Point src1Orig, PointerArea &src2, Point src2Orig)
| Upraví oblasti tak, aby všechny obsahovali pouze "společnou část" (průnik) se zadaným posunutím.
static int | copy (PointerArea dst, PointerArea src, Point srcOrig)
| Zkopíruje data z jedné oblasti do druhé na vybrané místo.
static int | fill (PointerArea dst, void *src)
| Vyplní oblast konstantní hodnotou.

## Public Attributes
const unsigned int | bpp
| udává, kolik je bajtů na pixel (BytesPerPixel).

## Private Attributes
byte * | pStart
| Pointer na začátek oblasti v paměti.
Rect | origDim
| Obdélník s údaji o původní velikosti celé oblasti - maximální možná velikost oblasti.
Rect | areaDim
| Obdélník představující velikost skutečně používané oblasti (výseče) z té původní.

## Detailed Description

Třída pro práci s nízkoúrovňovou reprezentací bitmapy v paměti. Třída pro práci s nízkoúrovňovou reprezentací bitmapy v paměti - dvourozměrné pole pixelů uložené jako souvislý blok dat.

Není vhodné, aby byla template, protože hlavní účel - makeCommon() musí zvládat odlišné bpp.

Není závislé na počtu bajtů na pixel, takže je obecně použitelné pro dvourozměrné pole jakýhkoliv dat, ale vyžaduje přetypování!!!

Definition at line 32 of file PointerArea.hpp.

## Constructor & Destructor Documentation

app::PointerArea::PointerArea | ( | void * | pStart,
|  | Rect | origDim,
|  | unsigned int | bpp
| ) |  |
| inline

Vytvoří oblast o daných parametrech.

Vytvoří oblast o daných parametrech, velikost oblasti je totožná s původní velikostí.

Uvažuje se šířka oblasti (počet prvků v oblasti) daná výsledkem volání origDim.getWidth() a výška oblasti daná voláním origDim.getHeight(), proto je pro správné fungování je doporučeno, aby origDim měl horní levý roh v bodě (0, 0) a dolní pravý roh měl souřadnice (width, height), přičemž při indexování od 0 již na souřadnici (width, height) není žádný prvek!

Parameters

  pStart | Pointer na začátek oblasti.
  origDim | Velikost původní oblasti, bude použita i jako velikost výřezu.
  bpp | Počet bajtů na pixel

Definition at line 50 of file PointerArea.hpp.

: bpp(bpp) { this->pStart = (byte *) pStart; this->origDim = origDim; this->areaDim = origDim; /*this->bpp = bpp;*/ }

app::PointerArea::PointerArea | ( | void * | pStart,
|  | Rect | origDim,
|  | Rect | areaDim,
|  | unsigned int | bpp
| ) |  |

Vytvoří oblast o daných parametrech.

Vytvoří oblast o daných parametrech, velikost oblasti se pokusí nastavit na areaDim, pokud tato přesahuje maximální (origDim), provede se ořez.

Uvažuje se šířka oblasti (počet prvků v oblasti) daná výsledkem volání origDim.getWidth() a výška oblasti daná voláním origDim.getHeight(), proto je pro správné fungování je doporučeno, aby origDim měl horní levý roh v bodě (0, 0) a dolní pravý roh měl souřadnice (width, height), přičemž při indexování od 0 již na souřadnici (width, height) není žádný prvek!

Totéž platí i pro areaDim.

Parameters

  pStart | Pointer na začátek oblasti.
  origDim | Velikost původní oblasti.
  areaDim | Velikost požadované oblasti, může být ořezána.
  bpp | Počet bajtů na pixel.

Definition at line 10 of file PointerArea.cpp.

: bpp(bpp) {
this->pStart = (byte *) pStart;
this->origDim = origDim;
this->areaDim = Rect::getIntersection(origDim, areaDim);
/* this->bpp = bpp; */
}

app::PointerArea::PointerArea | ( | const PointerArea & | other | ) |
| inline

Kopírovací konstruktor, kvůli konstantnímu bpp.

Kopírovací konstruktor kvůli konstantnímu bpp.

Parameters

  other | Kopírovaná PointerArea.

Definition at line 74 of file PointerArea.hpp.

: bpp(other.bpp) { pStart = other.pStart; origDim = other.origDim; areaDim = other.areaDim; /*this->bpp = bpp;*/ }

## Member Function Documentation

int app::PointerArea::copy | ( | PointerArea | dst,
|  | PointerArea | src,
|  | Point | srcOrig
| ) |  |
| static

Zkopíruje data z jedné oblasti do druhé na vybrané místo.

Zkopíruje data z jedné oblasti do druhé na vybrané místo, pokud mají stejný typ (bpp) a existuje společná část (průnik).

Parameters

  dst | Zdrojová oblast.
  src | Cílová oblast.
  srcOrig | Umístění horního levého rohu zdrojové oblasti v ss cílové oblasti.

Returns
  0 při úspěchu, jinak kód chyby.

Definition at line 70 of file PointerArea.cpp.

{
if (src.bpp != dst.bpp) {return 1;}
int err = PointerArea::makeCommon(dst, src, srcOrig);
if (err) {return 100 + err;}
byte * s = (byte *) src.getAreaBgn();
byte * d = (byte *) dst.getAreaBgn();
byte * sEnd = (byte *) src.getAreaEnd();
int count = src.getAreaByteWidth();
int srcByteWidth = src.getOrigByteWidth();
int dstByteWidth = dst.getOrigByteWidth();
while (s < sEnd) {
memcpy(d, s, count);
s += srcByteWidth;
d += dstByteWidth;
}
return 0;
}

int app::PointerArea::fill | ( | PointerArea | dst,
|  | void * | src
| ) |  |
| static

Vyplní oblast konstantní hodnotou.

Vyplní oblast dst konstantní hodnotou, kterou nalezne na adrese src.

Parameters

  dst | Oblast, která se má vyplnit.
  src | Místo, odkud se berou konstantní data.

Returns
  0 při úspěchu, jinak kód chyby.

Definition at line 91 of file PointerArea.cpp.

{
int count = dst.getAreaByteWidth();
byte * d = (byte *) dst.getAreaBgn();
byte * dRowEnd = d + count;
while (d < dRowEnd) {
memcpy(d, src, dst.bpp);
d += dst.bpp;
}
d += dst.getByteOffset();
byte * dEnd = (byte *) dst.getAreaEnd();
int dstByteWidth = dst.getOrigByteWidth();
src = (byte *) dst.getAreaBgn();
while (d < dEnd) {
memcpy(d, src, count);
d += dstByteWidth;
}
return 0;
}

Rect app::PointerArea::getArea | ( |  | ) | const
| inline

Vrací obdélník reprezentující vybranou oblast.

Definition at line 80 of file PointerArea.hpp.

{return areaDim;}

void* app::PointerArea::getAreaBgn | ( |  | ) | const
| inline

Vrací pointer na počátek vybrané oblasti.

Definition at line 128 of file PointerArea.hpp.

{return pStart + areaDim.tl.y * getOrigByteWidth() + areaDim.tl.x * bpp;}

unsigned int app::PointerArea::getAreaByteWidth | ( |  | ) | const
| inline

Vrací šířku vybrané oblasti v bajtech.

Definition at line 95 of file PointerArea.hpp.

{return areaDim.getWidth() * bpp;}

void* app::PointerArea::getAreaEnd | ( |  | ) | const
| inline

Vrací pointer ukazujici na první prvek za oblastí oblastí.

Definition at line 140 of file PointerArea.hpp.

{return pStart + (areaDim.br.y - 1) * getOrigByteWidth() + (areaDim.br.x - 1) * bpp;}

unsigned int app::PointerArea::getAreaHeight | ( |  | ) | const
| inline

Vrací výšku vybrané oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).

Definition at line 89 of file PointerArea.hpp.

{ return areaDim.getHeight(); }

void* app::PointerArea::getAreaRowEnd | ( |  | ) | const
| inline

Vrací pointer na první prvek za posledním prvkem v prvním řádku vybrané oblasti.

Definition at line 131 of file PointerArea.hpp.

{ return pStart + areaDim.tl.y * getOrigByteWidth() + areaDim.br.x * bpp;} // NETESTOVANO V DEMU

unsigned int app::PointerArea::getAreaSize | ( |  | ) | const
| inline

Vrací velikost dat ve vybrané oblasti v bajtech.

Definition at line 104 of file PointerArea.hpp.

{return areaDim.getWidth() * areaDim.getHeight() * bpp;}

unsigned int app::PointerArea::getAreaWidth | ( |  | ) | const
| inline

Vrací šířku vybrané oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).

Definition at line 83 of file PointerArea.hpp.

{ return areaDim.getWidth(); }

unsigned int app::PointerArea::getByteOffset | ( |  | ) | const
| inline

Vrací offset řádků vybrané oblasti vzhledem k původní v bajtech.

Vrací offset řádků vybrané oblasti vzhledem k původní oblasti v bajtech, tedy počet bajtů, o které je nutné se posunout při přechodu na začátek dalšího řádku vybrané oblasti od konce stávajícího řádku vybrané oblasti

Returns
  Offset v bajtech.

Definition at line 113 of file PointerArea.hpp.

{return getOrigByteWidth() - getAreaByteWidth();}

unsigned int app::PointerArea::getOffset | ( |  | ) | const
| inline

Vrací offset řádků vybrané oblasti vzhledem k původní v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).

Vrací offset řádků vybrané oblasti vzhledem k původní oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů), tedy počet prvků, o které je nutné se posunout při přechodu na začátek dalšího řádku vybrané oblasti od konce stávajícího řádku vybrané oblasti.

Returns
  Offset v počtu prvků.

Definition at line 122 of file PointerArea.hpp.

{ return getOrigWidth() - getAreaWidth(); }

Rect app::PointerArea::getOrig | ( |  | ) | const
| inline

Vrací obdélník představující původní oblast.

Definition at line 77 of file PointerArea.hpp.

{return origDim;}

void* app::PointerArea::getOrigBgn | ( |  | ) | const
| inline

Vrací pointer na počátek původní oblasti.

Definition at line 125 of file PointerArea.hpp.

{return pStart;}

unsigned int app::PointerArea::getOrigByteWidth | ( |  | ) | const
| inline

Vrací šířku původní oblasti v bajtech.

Definition at line 98 of file PointerArea.hpp.

{return origDim.getWidth() * bpp;}

void* app::PointerArea::getOrigEnd | ( |  | ) | const
| inline

Vrací pointer ukazujici na první prvek za původní oblastí oblastí.

Definition at line 134 of file PointerArea.hpp.

{return pStart + origDim.br.y * getOrigByteWidth();}

unsigned int app::PointerArea::getOrigHeight | ( |  | ) | const
| inline

Vrací výšku původní oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).

Definition at line 92 of file PointerArea.hpp.

{ return origDim.getHeight(); }

void* app::PointerArea::getOrigRowEnd | ( |  | ) | const
| inline

Vrací pointer na první prvek za posledním prvkem v prvním řádku (tedy na první (nultý) prvek druhého řádku).

Definition at line 137 of file PointerArea.hpp.

{ return pStart + getOrigByteWidth();} // NETESTOVANO V DEMU

unsigned int app::PointerArea::getOrigSize | ( |  | ) | const
| inline

Vrací velikost původní oblasti v bajtech.

Definition at line 101 of file PointerArea.hpp.

{return origDim.getWidth() * origDim.getHeight() * bpp;}

unsigned int app::PointerArea::getOrigWidth | ( |  | ) | const
| inline

Vrací šířku původní oblasti v počtu prvků (předpokládá se jeden prvek o velikosti bpp bajtů).

Definition at line 86 of file PointerArea.hpp.

{ return origDim.getWidth(); }

int app::PointerArea::makeCommon | ( | PointerArea & | dst,
|  | PointerArea & | src,
|  | Point | srcOrig
| ) |  |
| static

Upraví oblasti tak, aby obě obsahovali pouze "společnou část" (průnik) se zadaným posunutím.

Nalezne společnou část (průnik) dvou oblastí tak, že do souřadného systému oblasti dst se umístí zdrojová oblast src tak, že její horní levý roh je totožný s bodem srcOrig (v ss dst). Oblasti jsou následně ořezány tak, aby tvořili průnik.

Parameters

  dst | Cílová oblast.
  src | Zdrojová oblast.
  srcOrig | Umístění horního levého rohu zdrojové oblasti v ss cílové oblasti.

Returns
  0 při úspěchu, jinak kód chyby.

Definition at line 18 of file PointerArea.cpp.

{
Rect srcArea = src.getArea(); // odkud se budou brát data
if (!srcArea.isValid()) {return 1;}
Rect dstArea = dst.getArea();
Rect srcPlaced = srcArea.makeCopyAt(srcOrig); // Vezmu zdrojovou oblast a umístím ji tam, kde se má vykreslovat (převedu ji do ss cílové oblasti)...
// old: Rect srcPlaced = Rect::makeCopyAt(srcArea, srcOrig);
Rect placedCut = Rect::getIntersection(dstArea, srcPlaced); // == dstCut == srcPlacedCut // Získám průnik - toto je výřez cílové oblasti, pro který existují zdrojová data...
Vect dtl, dbr;
srcPlaced.getDifference(placedCut, dtl, dbr); // Zjistím o co se změnila zdrojová oblast při ořezu...
srcArea.resizeBy(dtl, dbr); // Adekvátně ořežu původní zdrojovou oblast...
if (!(srcArea.isValid() && placedCut.isValid())) {return 2;}
src.areaDim = srcArea;
dst.areaDim = placedCut;
return 0;
}

int app::PointerArea::makeCommon | ( | PointerArea & | dst,
|  | PointerArea & | src1,
|  | Point | src1Orig,
|  | PointerArea & | src2,
|  | Point | src2Orig
| ) |  |
| static

Upraví oblasti tak, aby všechny obsahovali pouze "společnou část" (průnik) se zadaným posunutím.

Nalezne společnou část (průnik) oblastí tak, že do souřadného systému oblasti dst se umístí zdrojové oblasti srcX tak, že jejch horní levý roh je totožný s bodem srcXOrig (v ss dst). Oblasti jsou následně ořezány tak, aby tvořili průnik.

Parameters

  dst | Cílová oblast.
  src1 | První zdrojová oblast.
  src1Orig | Horní levý roh první zdrojové oblasti v ss cílové.
  src2 | Druhá zdrojová oblast.
  src2Orig | Horní levý roh druhé zdrojové oblasti v ss cílové.

Returns
  0 při úspěchu, jinak kód chyby.

Definition at line 41 of file PointerArea.cpp.

{
Rect src1Area = src1.getArea(); // odkud se budou brát data
Rect src2Area = src2.getArea();
if (!(src1Area.isValid() && src2Area.isValid())) {return 1;}
Rect dstArea = dst.getArea();
Rect src1Placed = src1Area.makeCopyAt(src1Orig); // Vezmu zdrojovou oblast a umístím ji tam, kde se má vykreslovat (převedu ji do ss cílové oblasti)...
Rect src2Placed = src2Area.makeCopyAt(src2Orig);
Rect placedCut = Rect::getIntersection(dstArea, src1Placed); // ~~ dstCut // Získám průnik - toto je výřez cílové oblasti, pro který existují zdrojová data...
placedCut = Rect::getIntersection(placedCut, src2Placed); // == dstCut == src1PlacedCut == src2PlacedCut // Stačí jeden srcPlacedCut, protože musí být pro všechny totožný!!! ve finále je to spíš placedCut...
Vect dtl, dbr;
src1Placed.getDifference(placedCut, dtl, dbr); // Zjistím o co se změnila zdrojová oblast při ořezu...
src1Area.resizeBy(dtl, dbr); // Adekvátně ořežu původní zdrojovou oblast...
src2Placed.getDifference(placedCut, dtl, dbr);
src2Area.resizeBy(dtl, dbr);
if (!(src1Area.isValid() && src2Area.isValid() && dstArea.isValid())) {return 2;}
src1.areaDim = src1Area;
src2.areaDim = src2Area;
dst.areaDim = placedCut;
return 0;
}

## Member Data Documentation

Rect app::PointerArea::areaDim
| private

Obdélník představující velikost skutečně používané oblasti (výseče) z té původní.

Definition at line 35 of file PointerArea.hpp.

const unsigned int app::PointerArea::bpp

udává, kolik je bajtů na pixel (BytesPerPixel).

Definition at line 37 of file PointerArea.hpp.

Rect app::PointerArea::origDim
| private

Obdélník s údaji o původní velikosti celé oblasti - maximální možná velikost oblasti.

Definition at line 34 of file PointerArea.hpp.

byte* app::PointerArea::pStart
| private

Pointer na začátek oblasti v paměti.

Definition at line 33 of file PointerArea.hpp.

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

- /home/xxx/eclipse_workspaces/app/appcore/jni/app/utils/PointerArea.hpp
- /home/xxx/eclipse_workspaces/app/appcore/jni/app/utils/PointerArea.cpp