App

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

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

Classes | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
mhr.appcore.image.Image Class Reference

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

## Classes
class | FileConstants
| Třída uchovává konstanty pro čtení/zápis xml souboru popisujícího obraz. More...
class | UndoPatch
| Třída představuje záplatu, která slouží k vrácení zpět poslední úpravy rastrových dat. More...

## Public Member Functions
| Image (PDBitmap from) throws UnsupportedBitmapException, BitmapAllocationException
| Výchozí konstruktor, vytvoří obraz okolo kopie zadané bitmapy.
| Image (ImageFile f) throws ImageLoadingException
| Konstruktor pro načítání obrazu ze souboru.
int | dispose ()
| Uvolní nativní prostředky zabrané obrazem.
void | mergeAll ()
| Sloučí celý obraz do jediné rastrové vrstvy.
void | clear (ImageSelectedState item, int itemId)
| Vyčistí danou bitmapu.
void | fill (ImageSelectedState item, int itemId)
| Vyplní danou masku.
void | invertMask (ImageSelectedState item, int itemId)
| Invertuje danou masku.
void | toClipBoard (ImageSelectedState item, int itemId)
| Zkopíruje rastrová data daného prvku do schránky.
void | fromClipBoard (ImageSelectedState item, int itemId)
| Vloží do daného prvku rastrová data ze schránky.
void | addClipBoard (ImageSelectedState item, int itemId)
| Přičte data ze schránky k alpha kanálu daného elementu.
void | removeClipBoard (ImageSelectedState item, int itemId)
| Odečte data ze schránky od alpha kanálu daného elementu.
void | blendClipBoard (ImageSelectedState item, int itemId)
| Prolne data ze schránky v normálním módu do vybraného elementu.
void | resizeTo (int nWidth, int nHeight, InterpolatorType iType, double force) throws ImageStateException, BitmapAllocationException
| Provede změnu velikosti obrazu daným řevzorkováním.
void | cropTo (Rect r) throws ImageStateException, BitmapAllocationException
| Provede ořez obrazu dle daného obdélníku.
void | exportToFile (ImageFile f)
| Uloží obraz včetně vrstev do daného souboru.
void | applyUndoPatch ()
| Aplikuje záplatu pro vrácení úpravy rastrových dat, pokud je tato k dispozici.
int | getWidth ()
| vrací šířku obrazu.
int | getHeight ()
| Vrací výšku obrazu.
Depth | getDepth ()
| Vrací hloubku obrazu.
Rect | getRect ()
| Vrací obdélník odpovídající rozměrům obrazu.
PDImageDataPresentation | getPresentation ()
| Vrací prezentaci, se kterou je obraz asociován, pokud neexistuje vrací null.
void | setPresentation (PDImageDataPresentation pres)
| Asociuje danou prezentaci s obrazem. Obsah prezentace se vytvoří tak, aby odpovídal tomuto obrazu.
ImageSelectedState | getSelectedState ()
| Vrátí stav výběru obrazu.
Tool | getCanvasOwner ()
int | setSelectedState (ImageSelectedState state, int layerId) throws LayerNotFoundException
| Nastaví stav výběru obrazu. Pokud je požadován výběr masterMask, id není povinné
Layer | getLayer (int id) throws LayerNotFoundException
| Vrátí vrstvu s odpovídajícím id, pokud neexistuje, hodí výjimku. Prohledává postupně celý seznam vrstev.
void | requeryExrtaMargins ()
boolean | isMasterMaskActive ()
| Vrací, zda je masterMask (výběr) aktivní.
void | setMasterMaskActive (boolean active)
| Nastaví stav MasterMask (výběru), upraví prezentaci.
NBitmap | getMasterMask ()
| Vrátí bitmapu prezentující masterMask (výběr)
void | setLayerMaskActive (int layerId, boolean active) throws LayerNotFoundException
| Nastaví stav masky dané vrstvy, upraví prezentaci, přidá celý obraz do změněné oblasti.
void | setLayerOpacity (int layerId, double opacity) throws LayerNotFoundException
| Nastaví průhlednost dané vrstvy, upraví prezentaci.
int | setLayerVisibility (int layerId, boolean visibility) throws LayerNotFoundException
| Nastaví viditelnost dané vrstvy, upraví prezentaci.
int | createLayer (LayerType type, int overLayerWithId) throws LayerNotFoundException
| Vytvoří daný typ vrstvy daným konstruktorem.
int | duplicateLayer (int layerId)
int | deleteLayer (int layerId) throws LayerNotFoundException, ImageStateException
| Smaže vrstvu se zadaným id, upraví prezentaci.
int | moveLayer (int layerId, int beforeLayerWithId) throws LayerNotFoundException
| Přesune vrstvu.
void | updateLayerFromSpecificPresentation (int layerId)
| Zadá požadavek dané vrstvě, aby se aktualizovala ze své prezentace.
NBitmap | prepareCanvas (Tool tool, ChannelCount chCount) throws IllegalStateException, ImageException, ImageStateException
| Asociuje daný nástroj s canvasem a připraví canvas dle požadavků.
NBitmap | getCanvas (Tool tool) throws IllegalStateException
| Vrátí kanvas, pokud je kanvas aktuálně asociovaný s daným nástrojem.
void | addCanvasChangedArea (Rect area) throws IllegalStateException
| Pokud byly provedeny úpravy na Canvasu, je nutné zavolat tuto metodu s informacemi o upravené oblasti, jinak nebudou výsledky ani zobrazeny ani následně aplikovány na vrstvu.
void | submitCanvas (Tool tool, boolean commit) throws IllegalStateException, LayerNotFoundException
| Odešle kanvas, pokud je commit true, úpravy budou převedeny na vrstvu, pokud false, budou zahozeny. Nástroj již nebude asociován s kanvasem.
int | exportTo (NBitmap dst, Rect srcRect, int srcOrigX, int srcOrigY)
| Exportuje vybranou část obrazu do cílové bitmapy. UMÍSTĚNÍ DLE ORIG NENÍ PODPOROVÁNO, PŘEDPOKLÁDÁ SE STEJNÁ VELIKOST JAKO CANVAS.
Rect | exportChangedToHeuristic (NBitmap dst)
| Automaticky exportuje změněnou část obrazu (od posledního volání této metody) do cílové bitmapy.

## Protected Member Functions
void | finalize () throws Throwable
int | assignId ()
| přidělí nové id, které lze použít pro vrstvu.
int | getLastAssignedId ()
| Vrátí naposledy přidělené id.
void | addChangedArea (Rect area)
| Přidá vybranou oblast do seznamu k přerendrování.
int | getLayerPosition (int id) throws LayerNotFoundException
| Vrací pozici vrstvy v obraze, pokud je vrstve nenalezena.
Class<?extends Layer > | getClassFor (LayerType type)
| Pomocná metoda pro převod odpovídajícího enumu na třídu pro pozdější vytvoření defaultním konstruktorem.
Layer | createLayer (Class<?extends Layer > cls) throws ImageException
| Vytvoří instanci vrstvy stanoveným defaultním konstruktorem.
Layer | createLayer (Class<?extends Layer > cls, Element info, ImageFile file) throws ImageException
| Vytvoří instanci vrstvy dle popisu v souboru.
void | appendLeafElement (Document d, Element parent, String eName, String eContetnt)
| pomocná metoda, přidá listový xml element.

## Protected Attributes
int | width
| Šířka obrazu.
int | height
| Výška obrazu.
Depth | depth
| Barevná hloubka obrazu.
ArrayList< Layer > | layers = new ArrayList<Layer>()
| Seznam, který drží reference na všechny vrstvy.
int | nextId = 0
| Id, které bude přiděleno další vytvořené vrstvě.
NBitmap | canvas
| Kanvas pro kreslení, prozatím podporovaný jen 1ch, ale připraveno pro 1ch i 4ch.
RasterLayer | tmpLayer
| Dočasná vrstva, která nahradí upravovaný výběr.
NBitmap | masterMask
| MasterMask reprezentující výběr.
ImageSelectedState | selectedState
| Stav výběru, ve kterém se obraz nachází.
int | selectedLayerId
| Id právě aktivní vrstvy.
boolean | masterMaskActive
| Udává, jestli je masterMask (Výběr) aktivní.
Tool | canvasOwner = null
| Nástroj, který je vlastníkem kanvasu, pokud někdo vlastní kanvas, jiný nástroj jej nemůže použít. Odkaz se také používá pro renderování a commit.
LinkedList< Rect > | toBeRendered = new LinkedList<Rect>()
| Průnik udává oblast, kterou je aktuálně potřeba překreslit.
Rect | canvasChangedArea
| Obdélník určující oblast, která bude po dokončení kreslící operace prolnuta na vybranou vrstvu.
PDImageDataPresentation | pres
| Objekt, který bude obsahovat data potřebná k reprezentaci obrazu a bude sdílen mezi jádrem aplikace a UI.
int | extraMargins
UndoPatch | patch = null
| Záplata pro vrácení poslední úpravy rasterových dat.
NBitmap | clipBoard = null
| Schránka.

## Detailed Description

Třída pro reprezentaci obrazu.

Definition at line 54 of file Image.java.

## Constructor & Destructor Documentation

mhr.appcore.image.Image.Image | ( | PDBitmap | from | ) | throws UnsupportedBitmapException, BitmapAllocationException
| inline

Výchozí konstruktor, vytvoří obraz okolo kopie zadané bitmapy.

Parameters

  from |

Exceptions

  BitmapAllocationException |
  UnsupportedBitmapException |

Definition at line 261 of file Image.java.

{
BitmapInfo i = from.getInfo();
if (i.channelCount != ChannelCount.FOUR_CHANNEL) {
throw new UnsupportedBitmapException("Could not create image from supplied bitmap");
}
this.width = i.width;
this.height = i.height;
this.depth = i.depth;
RasterLayer l = (RasterLayer) createLayer(RasterLayer.class);
NBitmap tmp = new NBitmap(from);
tmp.copyTo(l.getBitmap(), tmp.getRect(), 0, 0);
tmp.dispose();
layers.add(l);
selectedLayerId = getLastAssignedId();
selectedState = ImageSelectedState.SELECTED_LAYER;
tmpLayer = (RasterLayer) createLayer(RasterLayer.class);
masterMask = new NBitmap(new BitmapInfo(width, height, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
masterMask.fill(masterMask.getRect(), 0x00);
canvas = new NBitmap(new BitmapInfo(width, height, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
}

mhr.appcore.image.Image.Image | ( | ImageFile | f | ) | throws ImageLoadingException
| inline

Konstruktor pro načítání obrazu ze souboru.

Parameters

  f |

Exceptions

  ImageLoadingException |

Definition at line 291 of file Image.java.

{
try {
FileConstants c = new FileConstants();
Document d = null;
Element r = null;
Element ii = null;
Element il = null;
try {
d = f.getDocument();
r = (Element) d.getElementsByTagName(c.ROOT_NODE).item(0);
ii = (Element) r.getElementsByTagName(c.INFO_NODE).item(0);
il = (Element) r.getElementsByTagName(c.IMAGE_LAYERS_NODE).item(0);
width = Integer.parseInt(ii.getElementsByTagName(c.WIDTH_NODE).item(0).getTextContent());
height = Integer.parseInt(ii.getElementsByTagName(c.HEIGHT_NODE).item(0).getTextContent());
depth = Depth.valueOf(ii.getElementsByTagName(c.DEPTH_NODE).item(0).getTextContent());
nextId = Integer.parseInt(ii.getElementsByTagName(c.NEXT_ID_NODE).item(0).getTextContent());
selectedState = ImageSelectedState.valueOf(ii.getElementsByTagName(c.SELECTED_STATE_NODE).item(0).getTextContent());
selectedLayerId = Integer.parseInt(ii.getElementsByTagName(c.SELECTED_LAYER_ID_NODE).item(0).getTextContent());
masterMaskActive = Boolean.parseBoolean(ii.getElementsByTagName(c.MASTER_MASK_ACTIVE_NODE).item(0).getTextContent());
} catch (ClassCastException e) {
throw new ImageLoadingException("Supplied xml doesn't describe image");
} catch (NullPointerException e) {
throw new ImageLoadingException("Supplied xml doesn't describe image");
}
try {
tmpLayer = (RasterLayer) createLayer(RasterLayer.class);
PDBitmap tmpMask = null;
NBitmap tmp = null;
try {
tmpMask = f.loadBitmap(c.MASTER_MASK_FILE_NAME);
tmp = new NBitmap(tmpMask);
masterMask = tmp.getChannel(3);
tmp.dispose();
tmpMask.dispose();
} catch (Exception e) {
if (tmp != null) {
tmp.dispose();
}
if (tmpMask != null) {
tmpMask.dispose();
}
throw new ImageLoadingException(e);
}
canvas = new NBitmap(new BitmapInfo(width, height, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
} catch (AllocationException e){
throw new ImageLoadingException(e);
} catch (UnsupportedBitmapException e) {
throw new ImageLoadingException(e);
}
NodeList ll = il.getElementsByTagName(c.LAYER_NODE);
int iMax = ll.getLength();
if (iMax < 1) {
throw new ImageLoadingException("Supplied image file doesn't have layers.");
}
Element li = null;
Layer l = null;
try {
for (int i = 0; i < iMax; i++) {
li = (Element) ll.item(i);
l = createLayer(getClassFor(LayerType.valueOf(li.getElementsByTagName(c.LAYER_TYPE_NODE).item(0).getTextContent())), li, f);
layers.add(l);
}
} catch (AllocationException e) {
throw new ImageLoadingException(e);
} catch (LayerCreationException e) {
throw new ImageLoadingException(e);
}
requeryExrtaMargins();
} catch (ImageLoadingException e) {
dispose();
throw new ImageLoadingException("Could not load image.", e);
}
}

## Member Function Documentation

void mhr.appcore.image.Image.addCanvasChangedArea | ( | Rect | area | ) | throws IllegalStateException
| inline

Pokud byly provedeny úpravy na Canvasu, je nutné zavolat tuto metodu s informacemi o upravené oblasti, jinak nebudou výsledky ani zobrazeny ani následně aplikovány na vrstvu.

Parameters

  area |

Exceptions

  IllegalStateException |

Definition at line 1836 of file Image.java.

{
if (canvasOwner == null) {
throw new IllegalStateException("Canvas is not prepared.");
}
if (canvasChangedArea == null) {
canvasChangedArea = new Rect(area);
} else {
canvasChangedArea.cover(area);
}
addChangedArea(area);
}

void mhr.appcore.image.Image.addChangedArea | ( | Rect | area | ) |
| inlineprotected

Přidá vybranou oblast do seznamu k přerendrování.

Parameters

  area |

Definition at line 417 of file Image.java.

{
synchronized (toBeRendered) {
toBeRendered.add(area);
toBeRendered.notifyAll();
}
}

void mhr.appcore.image.Image.addClipBoard | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Přičte data ze schránky k alpha kanálu daného elementu.

Parameters

  item |
  itemId |

Definition at line 972 of file Image.java.

{
if (clipBoard == null || canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
target = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
if (item == ImageSelectedState.SELECTED_LAYER) {
Blender.addTo4ch(target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
} else {
Blender.addTo(target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
}
} else {
if (item == ImageSelectedState.SELECTED_LAYER) {
Blender.addTo4ch(target, clipBoard, target.getRect(), 0, 0);
} else {
Blender.addTo(target, clipBoard, target.getRect(), 0, 0);
}
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

void mhr.appcore.image.Image.appendLeafElement | ( | Document | d,
|  | Element | parent,
|  | String | eName,
|  | String | eContetnt
| ) |  |
| inlineprotected

pomocná metoda, přidá listový xml element.

Parameters

  d |
  parent |
  eName |
  eContetnt |

Definition at line 532 of file Image.java.

{
Element e = d.createElement(eName);
e.setTextContent(eContetnt);
parent.appendChild(e);
}

void mhr.appcore.image.Image.applyUndoPatch | ( |  | ) |
| inline

Aplikuje záplatu pro vrácení úpravy rastrových dat, pokud je tato k dispozici.

Definition at line 1403 of file Image.java.

{
if (patch != null) {
if (patch.apply()) {
addChangedArea(patch.getArea());
if (pres != null) {
synchronized (pres) {
if (patch.getState() != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(patch.getId()).updateInfo(pres.getLayerInfo(patch.getId()));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
}
}
}

int mhr.appcore.image.Image.assignId | ( |  | ) |
| inlineprotected

přidělí nové id, které lze použít pro vrstvu.

Returns

Definition at line 401 of file Image.java.

{
return nextId++;
}

void mhr.appcore.image.Image.blendClipBoard | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Prolne data ze schránky v normálním módu do vybraného elementu.

Parameters

  item |
  itemId |

Definition at line 1148 of file Image.java.

{
if (clipBoard == null || canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
target = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
return;
case SELECTED_MASTER_MASK:
return;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
} else {
Blender.blendTo(BlendMode.BLEND_MODE_NORMAL, target, clipBoard, target.getRect(), 0, 0);
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

void mhr.appcore.image.Image.clear | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Vyčistí danou bitmapu.

Parameters

  item |
  itemId |

Definition at line 571 of file Image.java.

{
if (canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
target = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
if (item == ImageSelectedState.SELECTED_LAYER) {
Blender.removeFrom4ch(target, masterMask, target.getRect(), 0, 0);
} else {
Blender.removeFrom(target, masterMask, target.getRect(), 0, 0);
}
} else {
target.fill(target.getRect(), 0x00);
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

Layer mhr.appcore.image.Image.createLayer | ( | Class<?extends Layer > | cls | ) | throws ImageException
| inlineprotected

Vytvoří instanci vrstvy stanoveným defaultním konstruktorem.

       Vytvoří instanci vrstvy stanoveným defaultním konstruktorem. Vrstva je asociována s tímto obrazem, má přiřazeno ID. Správné implementované vrstva by po vytvoření
       neměla nijak změnit vzhled obrazu, to až po úpravě jejích parametrů.

Parameters

  cls | Třída nově vytvářené vrstvy.

Returns
  Vytvořená vrstva.

Exceptions

  ImageException |

Definition at line 479 of file Image.java.

{
try {
Constructor<? extends Layer> ctor = cls.getConstructor(new Class[] { Image.class, int.class });
return ctor.newInstance(new Object[] { this, assignId() });
} catch (NoSuchMethodException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (IllegalAccessException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (IllegalArgumentException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (InstantiationException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (InvocationTargetException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (ExceptionInInitializerError exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
}
}

Layer mhr.appcore.image.Image.createLayer | ( | Class<?extends Layer > | cls,
|  | Element | info,
|  | ImageFile | file
| ) |  | throws ImageException
| inlineprotected

Vytvoří instanci vrstvy dle popisu v souboru.

Parameters

  cls |
  info |
  file |

Returns

Exceptions

  ImageException |

Definition at line 506 of file Image.java.

{
try {
Constructor<? extends Layer> ctor = cls.getConstructor(new Class[] { Image.class, Element.class, ImageFile.class });
return ctor.newInstance(new Object[] { this, info, file});
} catch (NoSuchMethodException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (IllegalAccessException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (IllegalArgumentException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (InstantiationException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (InvocationTargetException exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
} catch (ExceptionInInitializerError exc) {
throw new ImageException("Layer not created, reflection failed due to: " + exc.toString() + " " + exc.getMessage());
}
}

int mhr.appcore.image.Image.createLayer | ( | LayerType | type,
|  | int | overLayerWithId
| ) |  | throws LayerNotFoundException
| inline

Vytvoří daný typ vrstvy daným konstruktorem.

Parameters

  type |
  overLayerWithId |

Returns

Exceptions

  LayerNotFoundException |

Definition at line 1671 of file Image.java.

{
if (selectedState == ImageSelectedState.SELECTED_MASTER_MASK) {
overLayerWithId = layers.get(layers.size() - 1).getId();
}
Layer l = createLayer(getClassFor(type));
layers.add(getLayerPosition(overLayerWithId) + 1, l);
if (pres != null) {
synchronized (pres) {
LayerPDInfo inf = new LayerPDInfo(pres);
l.updateInfo(inf);
pres.addLayerInfo(inf, overLayerWithId);
pres.hasChanged();
}
}
return 0;
}

void mhr.appcore.image.Image.cropTo | ( | Rect | r | ) | throws ImageStateException, BitmapAllocationException
| inline

Provede ořez obrazu dle daného obdélníku.

Parameters

  r |

Exceptions

  ImageStateException |
  BitmapAllocationException |

Definition at line 1283 of file Image.java.

{
if (canvasOwner != null) {
throw new ImageStateException("Canvas transaction already pending"); // Nastroj by se aplikoval na vrstvu, na kterou nemusi byt pouzitelny
}
Rect crop = r.cropBy(getRect());
if (crop.getWidth() <= 0 || crop.getHeight() <= 0) {
return;
}
canvas.cropTo(r);
masterMask.cropTo(r);
tmpLayer.cropTo(r);
for (Layer l : layers) {
l.cropTo(r);
}
width = tmpLayer.getWidth();
height = tmpLayer.getHeight();
if (patch != null) {
patch.dispose();
patch = null;
}
if (clipBoard != null) {
clipBoard.dispose();
clipBoard = null;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
for (int i = 0; i < layers.size(); i++) {
Layer l = layers.get(i);
l.updateInfo(pres.getLayerInfo(l.getId()));
}
pres.hasChanged();
}
}
}

int mhr.appcore.image.Image.deleteLayer | ( | int | layerId | ) | throws LayerNotFoundException, ImageStateException
| inline

Smaže vrstvu se zadaným id, upraví prezentaci.

Parameters

  layerId |

Returns

Exceptions

  ImageStateException |
  LayerNotFoundException |

Definition at line 1711 of file Image.java.

{
if (layers.size() == 1) {
// Nelze odstranit poslední vrstvu.
throw new ImageStateException("Could not deleta last layer");
}
Layer l = getLayer(layerId);
// Aktivujeme vrstvu, ktera byla pod ni, pokud byla vrstva vubec vybrana... ID je platne, ptz jinak getLayer hodi vyjimku
if (layerId == selectedLayerId) {
if (canvasOwner != null) {
throw new ImageStateException("Canvas transaction already pending"); // Nastroj by se aplikoval na vrstvu, na kterou nemusi byt pouzitelny
}
int oldIndex = layers.indexOf(l);
if (oldIndex > 0) {
selectedLayerId = layers.get(oldIndex - 1).getId();
} else {
selectedLayerId = layers.get(1).getId();
}
}
l.dispose();
layers.remove(l);
addChangedArea(getRect());
requeryExrtaMargins();
if (pres != null) {
synchronized (pres) {
pres.removeLayer(layerId);
pres.selectedLayerId = selectedLayerId;
pres.hasChanged();
}
}
return 0;
}

int mhr.appcore.image.Image.dispose | ( |  | ) |
| inline

Uvolní nativní prostředky zabrané obrazem.

Returns

Definition at line 377 of file Image.java.

{
for (Layer l : layers) {
l.dispose();
}
layers.clear();
masterMask.dispose();
canvas.dispose();
tmpLayer.dispose();
if (patch != null) {
patch.dispose();
}
if (clipBoard != null) {
clipBoard.dispose();
}
return 0;
}

int mhr.appcore.image.Image.duplicateLayer | ( | int | layerId | ) |
| inline

Definition at line 1688 of file Image.java.

{
Layer ol = getLayer(layerId);
Layer nl = ol.duplicate(assignId());
layers.add(getLayerPosition(layerId) + 1, nl);
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
LayerPDInfo inf = new LayerPDInfo(pres);
nl.updateInfo(inf);
pres.addLayerInfo(inf, layerId);
pres.hasChanged();
}
}
return 0;
}

Rect mhr.appcore.image.Image.exportChangedToHeuristic | ( | NBitmap | dst | ) |
| inline

Automaticky exportuje změněnou část obrazu (od posledního volání této metody) do cílové bitmapy.

Snaží se minimalizovat výpočetní nároky tím, že odebírá obdélníky z toBeRendered a porovnává velikost plochy, která by se renderovala, kdyby se renderovaly postupně s plochou, která by se renderovala, kdyby se oblast celá zahrnula do jediného obdélníku. V okamžiku, kdy již začne být výhodnější renderovat postupně provede renderování sloučené oblasti a vrátí obdélník s překreslenou oblastí.

Aby klient překreslil celou oblast, musí volat tuto metodu tak dlouho, dokud nevrátí null

Parameters

  dst |

Returns
  Vraci rect s překreslenou oblastí.

Definition at line 1987 of file Image.java.

{
Rect r;
Rect master;
Rect masterPreview;
long incrementalArea;
synchronized (toBeRendered) {
master = toBeRendered.pollFirst();
if (master == null) {
return null;
}
incrementalArea = master.getArea();
masterPreview = new Rect(master);
while ((r = toBeRendered.peekFirst()) != null) {
incrementalArea += r.getArea();
masterPreview.cover(r);
if (incrementalArea < masterPreview.getArea()) {
break;
}
master.cover(r);
toBeRendered.removeFirst();
}
}
exportTo(dst, master, master.tlx, master.tly);
return master;
}

int mhr.appcore.image.Image.exportTo | ( | NBitmap | dst,
|  | Rect | srcRect,
|  | int | srcOrigX,
|  | int | srcOrigY
| ) |  |
| inline

Exportuje vybranou část obrazu do cílové bitmapy. UMÍSTĚNÍ DLE ORIG NENÍ PODPOROVÁNO, PŘEDPOKLÁDÁ SE STEJNÁ VELIKOST JAKO CANVAS.

Parameters

  dst |
  srcRect |
  srcOrigX |
  srcOrigY |

Returns

Definition at line 1916 of file Image.java.

{
BitmapInfo dstInfo = dst.getInfo();
if (dstInfo.channelCount == ChannelCount.FOUR_CHANNEL && dstInfo.depth == this.depth) {
Rect tmpRect = new Rect(srcRect);
tmpRect.growBy(2 * extraMargins);
tmpRect.cropBy(getRect());
srcOrigX = tmpRect.tlx;
srcOrigY = tmpRect.tly;
srcRect.growBy(extraMargins);
srcRect.cropBy(getRect());
dst.fill(tmpRect, 0xFF000000);
for (Layer l : layers) {
if (l.getId() == selectedLayerId) {
if (canvasOwner != null) {
NBitmap m = (masterMaskActive) ? masterMask : null;
switch (selectedState) {
case SELECTED_LAYER:
canvasOwner.onRender(this, canvas, tmpLayer.getBitmap(), ((RasterLayer) l).getBitmap(), m, tmpRect, srcOrigX, srcOrigY);
tmpLayer.applyTo(dst, tmpRect, srcOrigX, srcOrigY, l.getMask(false));
break;
case SELECTED_MASK:
canvasOwner.onRender(this, canvas, tmpLayer.getMask(true), l.getMask(true), m, tmpRect, srcOrigX, srcOrigY);
l.applyTo(dst, tmpRect, srcOrigX, srcOrigY, tmpLayer.getMask(true));
break;
case SELECTED_MASTER_MASK:
l.applyTo(dst, tmpRect, srcOrigX, srcOrigY);
default:
break;
}
} else {
l.applyTo(dst, tmpRect, srcOrigX, srcOrigY);
}
} else {
l.applyTo(dst, tmpRect, srcOrigX, srcOrigY);
}
}
if (selectedState == ImageSelectedState.SELECTED_MASK) {
if (canvasOwner != null) {
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, dst, tmpLayer.getMask(true), 0xAA0000FF, tmpRect, srcOrigX, srcOrigY);
} else {
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, dst, getLayer(selectedLayerId).getMask(true), 0xAA0000FF, tmpRect, srcOrigX, srcOrigY);
}
} else if (selectedState == ImageSelectedState.SELECTED_MASTER_MASK) {
if (canvasOwner != null) {
canvasOwner.onRender(this, canvas, tmpLayer.getMask(true), masterMask, null, tmpRect, srcOrigX, srcOrigY);
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, dst, tmpLayer.getMask(true), 0xAA0000FF, tmpRect, srcOrigX, srcOrigY);
} else {
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, dst, masterMask, 0xAA0000FF, tmpRect, srcOrigX, srcOrigY);
}
}
} else {
throw new IllegalArgumentException("Target bitmap is of incompatible type");
}
return 0;
}

void mhr.appcore.image.Image.exportToFile | ( | ImageFile | f | ) |
| inline

Uloží obraz včetně vrstev do daného souboru.

Parameters

  f |

Definition at line 1336 of file Image.java.

{
FileConstants c = new FileConstants();
Document d = null;
Element r = null;
Element e = null;
Element ii = null;
Element il = null;
try {
d = f.getDocument();
r = d.createElement(c.ROOT_NODE);
d.appendChild(r);
ii = d.createElement(c.INFO_NODE);
r.appendChild(ii);
il = d.createElement(c.IMAGE_LAYERS_NODE);
r.appendChild(il);
appendLeafElement(d, ii, c.WIDTH_NODE, Integer.toString(width));
appendLeafElement(d, ii, c.HEIGHT_NODE, Integer.toString(height));
appendLeafElement(d, ii, c.DEPTH_NODE, depth.toString());
appendLeafElement(d, ii, c.NEXT_ID_NODE, Integer.toString(nextId));
appendLeafElement(d, ii, c.SELECTED_STATE_NODE, selectedState.toString());
appendLeafElement(d, ii, c.SELECTED_LAYER_ID_NODE, Integer.toString(selectedLayerId));
appendLeafElement(d, ii, c.MASTER_MASK_ACTIVE_NODE, Boolean.toString(masterMaskActive));
} catch (Exception exc) {
throw new ImageSavingException(exc);
}
try {
for (Layer l : layers) {
e = d.createElement(c.LAYER_NODE);
l.fillLayerElement(d, f, e);
il.appendChild(e);
}
} catch (Exception exc) {
throw new ImageSavingException(exc);
}
PDBitmap tmpBitmap = null;
NBitmap tmpWrap = null;
try {
tmpBitmap = f.createBitmap(new BitmapInfo(width, height, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
tmpWrap = new NBitmap(tmpBitmap);
masterMask.copyTo(tmpWrap, masterMask.getRect(), 0, 0);
tmpWrap.dispose();
f.writeMask(tmpBitmap, c.MASTER_MASK_FILE_NAME);
tmpBitmap.dispose();
} catch (Exception exc) {
if (tmpWrap != null) {
tmpWrap.dispose();
}
if (tmpBitmap != null) {
tmpBitmap.dispose();
}
throw new ImageSavingException(exc);
}
try {
f.writeDocument();
} catch (Exception exc) {
throw new ImageSavingException(exc);
}
}

void mhr.appcore.image.Image.fill | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Vyplní danou masku.

Parameters

  item |
  itemId |

Definition at line 655 of file Image.java.

{
if (canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
return;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
Blender.addTo(target, masterMask, target.getRect(), 0, 0);
} else {
target.fill(target.getRect(), 0xFFFFFFFF);
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

void mhr.appcore.image.Image.finalize | ( |  | ) | throws Throwable
| inlineprotected

Definition at line 249 of file Image.java.

{
dispose();
super.finalize();
}

void mhr.appcore.image.Image.fromClipBoard | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Vloží do daného prvku rastrová data ze schránky.

Parameters

  item |
  itemId |

Definition at line 878 of file Image.java.

{
if (clipBoard == null || canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
target = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
if (item == ImageSelectedState.SELECTED_LAYER) {
if (clipBoard.getInfo().channelCount != ChannelCount.FOUR_CHANNEL) {
tmpPatch.dispose();
return;
}
Blender.removeFrom4ch(target, masterMask, target.getRect(), 0, 0);
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
} else {
if (clipBoard.getInfo().channelCount != ChannelCount.SINGLE_CHANNEL) {
tmpPatch.dispose();
return;
}
Blender.removeFrom(target, masterMask, target.getRect(), 0, 0);
Blender.addTo(target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
}
} else {
clipBoard.copyTo(target, getRect(), 0, 0);
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

NBitmap mhr.appcore.image.Image.getCanvas | ( | Tool | tool | ) | throws IllegalStateException
| inline

Vrátí kanvas, pokud je kanvas aktuálně asociovaný s daným nástrojem.

Parameters

  tool |

Returns

Exceptions

  IllegalStateException |

Definition at line 1824 of file Image.java.

{
if (canvasOwner != tool) {
throw new IllegalStateException("Tool is not canvas owner");
}
return canvas;
}

Tool mhr.appcore.image.Image.getCanvasOwner | ( |  | ) |
| inline

Definition at line 1502 of file Image.java.

{
return canvasOwner;
}

Class<? extends Layer> mhr.appcore.image.Image.getClassFor | ( | LayerType | type | ) |
| inlineprotected

Pomocná metoda pro převod odpovídajícího enumu na třídu pro pozdější vytvoření defaultním konstruktorem.

Parameters

  type |

Returns

Definition at line 440 of file Image.java.

{
switch (type) {
case LAYER_RASTER:
return RasterLayer.class;
case LAYER_COLOR:
return ColorLayer.class;
case LAYER_BRIGHTNESS:
return BrightnessLUTLayer.class;
case LAYER_CONTRAST:
return ContrastLUTLayer.class;
case LAYER_GAMMA:
return GammaLUTLayer.class;
case LAYER_CURVES:
return CurvesLUTLayer.class;
case LAYER_GAUSSIAN_BLUR:
return GaussianBlurFilterLayer.class;
case LAYER_LAPLACE_SHARPEN:
return LaplaceSharpenFilterLayer.class;
case LAYER_GAUSSIAN_SHARPEN:
return GaussianSharpenFilterLayer.class;
case LAYER_LAPLACIAN_OF_GAUSSIAN_SHARPEN:
return LaplacianOfGaussianSharpenFilterLayer.class;
case LAYER_DIFFERENCE_OF_GAUSSIAN_SHARPEN:
return DifferenceOfGaussianSharpenFilterLayer.class;
default:
return null;
}
}

Depth mhr.appcore.image.Image.getDepth | ( |  | ) |
| inline

Vrací hloubku obrazu.

Returns

Definition at line 1445 of file Image.java.

{
return depth;
}

int mhr.appcore.image.Image.getHeight | ( |  | ) |
| inline

Vrací výšku obrazu.

Returns

Definition at line 1437 of file Image.java.

{
return height;
}

int mhr.appcore.image.Image.getLastAssignedId | ( |  | ) |
| inlineprotected

Vrátí naposledy přidělené id.

Returns

Definition at line 409 of file Image.java.

{
return nextId - 1;
}

Layer mhr.appcore.image.Image.getLayer | ( | int | id | ) | throws LayerNotFoundException
| inline

Vrátí vrstvu s odpovídajícím id, pokud neexistuje, hodí výjimku. Prohledává postupně celý seznam vrstev.

Parameters

  id |

Returns

Exceptions

  LayerNotFoundException |

Definition at line 1558 of file Image.java.

{
for (Layer l : layers) {
if (l.getId() == id) {
return l;
}
}
throw new LayerNotFoundException("Layer with id " + id + " doesn't exist");
}

int mhr.appcore.image.Image.getLayerPosition | ( | int | id | ) | throws LayerNotFoundException
| inlineprotected

Vrací pozici vrstvy v obraze, pokud je vrstve nenalezena.

Parameters

  id |

Returns

Exceptions

  LayerNotFoundException |

Definition at line 430 of file Image.java.

{
Layer l = getLayer(id);
return layers.indexOf(l);
}

NBitmap mhr.appcore.image.Image.getMasterMask | ( |  | ) |
| inline

Vrátí bitmapu prezentující masterMask (výběr)

Returns

Definition at line 1602 of file Image.java.

{
return masterMask;
}

PDImageDataPresentation mhr.appcore.image.Image.getPresentation | ( |  | ) |
| inline

Vrací prezentaci, se kterou je obraz asociován, pokud neexistuje vrací null.

Returns

Definition at line 1461 of file Image.java.

{
return pres;
}

Rect mhr.appcore.image.Image.getRect | ( |  | ) |
| inline

Vrací obdélník odpovídající rozměrům obrazu.

Returns

Definition at line 1453 of file Image.java.

{
return new Rect(width, height);
}

ImageSelectedState mhr.appcore.image.Image.getSelectedState | ( |  | ) |
| inline

Vrátí stav výběru obrazu.

Returns

Definition at line 1498 of file Image.java.

{
return selectedState;
}

int mhr.appcore.image.Image.getWidth | ( |  | ) |
| inline

vrací šířku obrazu.

Returns

Definition at line 1429 of file Image.java.

{
return width;
}

void mhr.appcore.image.Image.invertMask | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Invertuje danou masku.

Parameters

  item |
  itemId |

Definition at line 727 of file Image.java.

{
if (canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
return;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
NBitmap tmp = null;
try {
tmp = new NBitmap(target);
Blender.addTo(target, masterMask, target.getRect(), 0, 0);
Blender.removeFrom(target, masterMask, tmp, target.getRect(), 0, 0, 0, 0);
} finally {
if (tmp != null) {
tmp.dispose();
}
}
} else {
NBitmap tmp = null;
try {
tmp = new NBitmap(target);
target.fill(target.getRect(), 0xFFFFFFFF);
Blender.removeFrom(target, tmp, target.getRect(), 0, 0);
} finally {
if (tmp != null) {
tmp.dispose();
}
}
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

boolean mhr.appcore.image.Image.isMasterMaskActive | ( |  | ) |
| inline

Vrací, zda je masterMask (výběr) aktivní.

Returns

Definition at line 1582 of file Image.java.

{
return masterMaskActive;
}

void mhr.appcore.image.Image.mergeAll | ( |  | ) |
| inline

Sloučí celý obraz do jediné rastrové vrstvy.

Definition at line 543 of file Image.java.

{
if (canvasOwner != null) {
return;
}
RasterLayer merged = new RasterLayer(this, assignId());
NBitmap dst = merged.getBitmap();
for (Layer l : layers) {
l.applyTo(dst, getRect(), 0, 0);
l.dispose();
}
layers = new ArrayList<Layer>();
layers.add(merged);
selectedLayerId = merged.getId();
setPresentation(pres);
if (pres != null) {
pres.hasChanged();
}
}

int mhr.appcore.image.Image.moveLayer | ( | int | layerId,
|  | int | beforeLayerWithId
| ) |  | throws LayerNotFoundException
| inline

Přesune vrstvu.

Parameters

  layerId |
  beforeLayerWithId | -1, pokud má být zařazeno na konec

Returns

Exceptions

  LayerNotFoundException |

Definition at line 1750 of file Image.java.

{
Layer l = getLayer(layerId);
int oldIndex = layers.indexOf(l);
int newIndex = (beforeLayerWithId < 0) ? layers.size() : layers.indexOf(getLayer(beforeLayerWithId));
layers.remove(l);
if (oldIndex < newIndex) {
newIndex--;
}
layers.add(newIndex, l);
if (pres != null) {
synchronized (pres) {
pres.moveLayer(layerId, beforeLayerWithId);
pres.hasChanged();
}
}
addChangedArea(getRect());
return 0;
}

NBitmap mhr.appcore.image.Image.prepareCanvas | ( | Tool | tool,
|  | ChannelCount | chCount
| ) |  | throws IllegalStateException, ImageException, ImageStateException
| inline

Asociuje daný nástroj s canvasem a připraví canvas dle požadavků.

Parameters

  tool |
  chCount |

Returns

Exceptions

  IllegalStateException |
  ImageException |
  ImageStateException |

Definition at line 1791 of file Image.java.

{
if (canvasOwner != null) {
throw new IllegalStateException("Canvas is already pending.");
}
if (selectedState == ImageSelectedState.SELECTED_LAYER || selectedState == ImageSelectedState.SELECTED_MASK) {
Layer l = getLayer(selectedLayerId);
if (selectedState == ImageSelectedState.SELECTED_LAYER) {
if (!(l instanceof RasterLayer)) {
throw new ImageStateException("Selected layer doesn't support canvas"); // Pouze RasterLayer muze ziskat canvas, ostatni vrstvy nemaji co reagovat na kresleni...
}
tmpLayer.setMode(((RasterLayer) l).getMode());
}
if (selectedState == ImageSelectedState.SELECTED_LAYER ) {
if (!l.isVisible()) {
throw new ImageStateException("Selected layer is invisible");
}
}
tmpLayer.setVisible(l.isVisible());
tmpLayer.setMaskActive(l.isMaskActive());
tmpLayer.setOpacity(l.getOpacity());
}
canvasOwner = tool;
canvas.fill(canvas.getRect(), 0x00);
canvasChangedArea = null;
return canvas;
}

void mhr.appcore.image.Image.removeClipBoard | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Odečte data ze schránky od alpha kanálu daného elementu.

Parameters

  item |
  itemId |

Definition at line 1060 of file Image.java.

{
if (clipBoard == null || canvasOwner != null) {
return;
}
NBitmap target = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
target = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
target = l.getMask(true);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
target = masterMask;
break;
case SELECTED_NONE:
return;
}
if (target == null ) {
return; // maska neexistuje, jiny problem
}
UndoPatch tmpPatch = new UndoPatch(target, target.getRect(), selectedState, itemId);
try {
if (masterMaskActive) {
if (item == ImageSelectedState.SELECTED_LAYER) {
Blender.removeFrom4ch(target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
} else {
Blender.removeFrom(target, masterMask, clipBoard, target.getRect(), 0, 0, 0, 0);
}
} else {
if (item == ImageSelectedState.SELECTED_LAYER) {
Blender.removeFrom4ch(target, clipBoard, target.getRect(), 0, 0);
} else {
Blender.removeFrom(target, clipBoard, target.getRect(), 0, 0);
}
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch.dispose();
patch = tmpPatch;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(itemId).updateInfo(pres.getLayerInfo(itemId));
pres.hasChanged();
} else {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
return;
}

void mhr.appcore.image.Image.requeryExrtaMargins | ( |  | ) |
| inline

Definition at line 1568 of file Image.java.

{
int extra = 0;
int tmp;
for (Layer l : layers) {
tmp = l.getExtraMargin();
extra = Math.max(extra, tmp);
}
extraMargins = extra;
}

void mhr.appcore.image.Image.resizeTo | ( | int | nWidth,
|  | int | nHeight,
|  | InterpolatorType | iType,
|  | double | force
| ) |  | throws ImageStateException, BitmapAllocationException
| inline

Provede změnu velikosti obrazu daným řevzorkováním.

Parameters

  nWidth |
  nHeight |
  iType |
  force |

Exceptions

  ImageStateException |
  BitmapAllocationException |

Definition at line 1226 of file Image.java.

{
if (canvasOwner != null) {
throw new ImageStateException("Canvas transaction already pending"); // Nastroj by se aplikoval na vrstvu, na kterou nemusi byt pouzitelny
}
NBitmap tmp;
tmp = new NBitmap(new BitmapInfo(nWidth, nHeight, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
Interpolator.resampleTo(canvas, tmp, iType, force);
canvas.dispose();
canvas = tmp;
tmp = new NBitmap(new BitmapInfo(nWidth, nHeight, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
Interpolator.resampleTo(masterMask, tmp, iType, force);
masterMask.dispose();
masterMask = tmp;
tmpLayer.resizeTo(nWidth, nHeight, iType, force);
for (Layer l : layers) {
l.resizeTo(nWidth, nHeight, iType, force);
}
width = tmpLayer.getWidth();
height = tmpLayer.getHeight();
if (patch != null) {
patch.dispose();
patch = null;
}
if (clipBoard != null) {
clipBoard.dispose();
clipBoard = null;
}
addChangedArea(getRect());
if (pres != null) {
synchronized (pres) {
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
for (int i = 0; i < layers.size(); i++) {
Layer l = layers.get(i);
l.updateInfo(pres.getLayerInfo(l.getId()));
}
pres.hasChanged();
}
}
}

void mhr.appcore.image.Image.setLayerMaskActive | ( | int | layerId,
|  | boolean | active
| ) |  | throws LayerNotFoundException
| inline

Nastaví stav masky dané vrstvy, upraví prezentaci, přidá celý obraz do změněné oblasti.

Parameters

  layerId |
  active |

Exceptions

  LayerNotFoundException |

Definition at line 1612 of file Image.java.

{
Layer l = getLayer(layerId);
l.setMaskActive(active);
if (pres != null) {
LayerPDInfo i = pres.getLayerInfo(layerId);
l.updateInfo(i);
pres.hasChanged();
}
addChangedArea(getRect());
}

void mhr.appcore.image.Image.setLayerOpacity | ( | int | layerId,
|  | double | opacity
| ) |  | throws LayerNotFoundException
| inline

Nastaví průhlednost dané vrstvy, upraví prezentaci.

Parameters

  layerId |
  opacity | Průhlednost 0..1

Exceptions

  LayerNotFoundException |

Definition at line 1630 of file Image.java.

{
Layer l = getLayer(layerId);
l.setOpacity(opacity);
if (pres != null) {
LayerPDInfo i = pres.getLayerInfo(layerId);
l.updateInfo(i);
pres.hasChanged();
}
if (l.isVisible()) {
addChangedArea(getRect());
}
}

int mhr.appcore.image.Image.setLayerVisibility | ( | int | layerId,
|  | boolean | visibility
| ) |  | throws LayerNotFoundException
| inline

Nastaví viditelnost dané vrstvy, upraví prezentaci.

Parameters

  layerId |
  visibility |

Returns

Exceptions

  LayerNotFoundException |

Definition at line 1650 of file Image.java.

{
Layer l = getLayer(layerId);
l.setVisible(visibility);
if (pres != null) {
synchronized (pres) {
LayerPDInfo inf = pres.getLayerInfo(layerId);
l.updateInfo(inf);
pres.hasChanged();
}
}
addChangedArea(getRect());
return 0;
}

void mhr.appcore.image.Image.setMasterMaskActive | ( | boolean | active | ) |
| inline

Nastaví stav MasterMask (výběru), upraví prezentaci.

Parameters

  active |

Definition at line 1590 of file Image.java.

{
masterMaskActive = active;
if (pres != null) {
pres.masterMaskActive = active;
pres.hasChanged();
}
}

void mhr.appcore.image.Image.setPresentation | ( | PDImageDataPresentation | pres | ) |
| inline

Asociuje danou prezentaci s obrazem. Obsah prezentace se vytvoří tak, aby odpovídal tomuto obrazu.

Parameters

  pres |

Definition at line 1469 of file Image.java.

{
this.pres = pres;
if (pres == null) {
return;
}
synchronized (pres) {
pres.selectedLayerId = selectedLayerId;
pres.selectedState = selectedState;
pres.masterMaskActive = masterMaskActive;
pres.masterMask = pres.createMaskThumb();
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
pres.getLayers().clear();
for (int i = 0; i < layers.size(); i++) {
Layer l = layers.get(i);
LayerPDInfo inf = new LayerPDInfo(pres);
l.updateInfo(inf);
pres.addLayerInfo(inf);
}
}
}

int mhr.appcore.image.Image.setSelectedState | ( | ImageSelectedState | state,
|  | int | layerId
| ) |  | throws LayerNotFoundException
| inline

Nastaví stav výběru obrazu. Pokud je požadován výběr masterMask, id není povinné

Parameters

  state |
  layerId |

Returns

Definition at line 1512 of file Image.java.

{
if (canvasOwner != null) {
throw new ImageStateException("Canvas transaction already pending"); // Nastroj by se aplikoval na vrstvu, na kterou nemusi byt pouzitelny
}
if (state != selectedState) {
addChangedArea(getRect());
}
switch (state) {
case SELECTED_NONE:
// Toto by nemel byt spravny zpusob uziti
selectedLayerId = -1;
break;
case SELECTED_LAYER: {
Layer l = getLayer(layerId);
selectedLayerId = layerId;
break;
}
case SELECTED_MASK: {
Layer l = getLayer(layerId);
selectedLayerId = layerId;
addChangedArea(getRect()); // Kvůli náhledu masky
break;
}
case SELECTED_MASTER_MASK:
selectedLayerId = -1;
addChangedArea(getRect()); // Kvůli náhledu masky
break;
default:
}
selectedState = state;
if (pres != null) {
synchronized (pres) {
pres.selectedState = state;
pres.selectedLayerId = selectedLayerId;
pres.hasChanged();
}
}
return 0;
}

void mhr.appcore.image.Image.submitCanvas | ( | Tool | tool,
|  | boolean | commit
| ) |  | throws IllegalStateException, LayerNotFoundException
| inline

Odešle kanvas, pokud je commit true, úpravy budou převedeny na vrstvu, pokud false, budou zahozeny. Nástroj již nebude asociován s kanvasem.

Parameters

  tool |
  commit |

Exceptions

  LayerNotFoundException |
  IllegalStateException |

Definition at line 1855 of file Image.java.

{
if (tool != canvasOwner) {
throw new IllegalStateException("Canvas is not prepared.");
}
canvasChangedArea.cropBy(getRect());
if (commit) {
if (patch != null) {
patch.dispose();
patch = null;
}
switch (selectedState) {
case SELECTED_LAYER: {
RasterLayer l = (RasterLayer) getLayer(selectedLayerId);
NBitmap m = (masterMaskActive) ? masterMask : null;
patch = new UndoPatch(l.getBitmap());
canvasOwner.onCommit(this, canvas, tmpLayer.getBitmap(), l.getBitmap(), m, canvasChangedArea, canvasChangedArea.tlx, canvasChangedArea.tly);
break;
}
case SELECTED_MASK: {
Layer l = getLayer(selectedLayerId);
NBitmap m = (masterMaskActive) ? masterMask : null;
patch = new UndoPatch(l.getMask(true));
canvasOwner.onCommit(this, canvas, tmpLayer.getMask(true), l.getMask(true), m, canvasChangedArea, canvasChangedArea.tlx, canvasChangedArea.tly);
break;
}
case SELECTED_MASTER_MASK: {
patch = new UndoPatch(masterMask);
canvasOwner.onCommit(this, canvas, masterMask, masterMask, null, canvasChangedArea, canvasChangedArea.tlx, canvasChangedArea.tly);
break;
}
default:
break;
}
} else {
addChangedArea(canvasChangedArea);
}
canvasOwner = null;
if (pres != null) {
synchronized (pres) {
if (selectedState != ImageSelectedState.SELECTED_MASTER_MASK) {
getLayer(selectedLayerId).updateInfo(pres.getLayerInfo(selectedLayerId));
pres.hasChanged();
} else {
pres.masterMaskActive = masterMaskActive;
NBitmap mskThumbWrap = new NBitmap(pres.masterMask);
Interpolator.resampleTo(masterMask, mskThumbWrap);
mskThumbWrap.dispose();
}
}
}
}

void mhr.appcore.image.Image.toClipBoard | ( | ImageSelectedState | item,
|  | int | itemId
| ) |  |
| inline

Zkopíruje rastrová data daného prvku do schránky.

Parameters

  item |
  itemId |

Definition at line 817 of file Image.java.

{
if (clipBoard != null) {
clipBoard.dispose();
clipBoard = null;
}
NBitmap source = null;
switch (item) {
case SELECTED_LAYER:
try {
Layer l = getLayer(itemId);
source = ((RasterLayer)l).getBitmap();
} catch (LayerNotFoundException e) {
return;
} catch (ClassCastException e) {
return;
}
break;
case SELECTED_MASK:
try {
Layer l = getLayer(itemId);
source = l.getMask(false);
} catch (LayerNotFoundException e) {
return;
}
break;
case SELECTED_MASTER_MASK:
source = masterMask;
break;
case SELECTED_NONE:
return;
}
if (source == null ) {
return;
}
if (masterMaskActive) {
BitmapInfo i = source.getInfo();
clipBoard = new NBitmap(i);
clipBoard.fill(clipBoard.getRect(), 0x0);
if (i.channelCount == ChannelCount.SINGLE_CHANNEL) {
Blender.addTo(clipBoard, masterMask, source, masterMask.getRect(), 0, 0, 0, 0);
} else if (i.channelCount == ChannelCount.FOUR_CHANNEL) {
Blender.drawTo(BlendMode.BLEND_MODE_NORMAL, clipBoard, masterMask, source, masterMask.getRect(), 0, 0, 0, 0);
}
} else {
clipBoard = new NBitmap(source);
}
return;
}

void mhr.appcore.image.Image.updateLayerFromSpecificPresentation | ( | int | layerId | ) |
| inline

Zadá požadavek dané vrstvě, aby se aktualizovala ze své prezentace.

Parameters

  layerId |

Definition at line 1773 of file Image.java.

{
Layer l = getLayer(layerId);
synchronized (pres) {
l.updateFromSpecificPresentation(pres.getLayerInfo(layerId));
pres.hasChanged();
}
addChangedArea(getRect());
}

## Member Data Documentation

NBitmap mhr.appcore.image.Image.canvas
| protected

Kanvas pro kreslení, prozatím podporovaný jen 1ch, ale připraveno pro 1ch i 4ch.

Definition at line 219 of file Image.java.

Rect mhr.appcore.image.Image.canvasChangedArea
| protected

Obdélník určující oblast, která bude po dokončení kreslící operace prolnuta na vybranou vrstvu.

Definition at line 233 of file Image.java.

Tool mhr.appcore.image.Image.canvasOwner = null
| protected

Nástroj, který je vlastníkem kanvasu, pokud někdo vlastní kanvas, jiný nástroj jej nemůže použít. Odkaz se také používá pro renderování a commit.

Definition at line 225 of file Image.java.

NBitmap mhr.appcore.image.Image.clipBoard = null
| protected

Schránka.

Definition at line 241 of file Image.java.

Depth mhr.appcore.image.Image.depth
| protected

Barevná hloubka obrazu.

Definition at line 216 of file Image.java.

int mhr.appcore.image.Image.extraMargins
| protected

Pokud je nějaká vrstva filtr, potřebuje mít na výstupu, na který se aplikuje extra okraje s aktuálními daty. Nástroje, které extra místo nepotřebují musí poskytnout platná data v daném rozsahu.

Definition at line 239 of file Image.java.

int mhr.appcore.image.Image.height
| protected

Výška obrazu.

Definition at line 215 of file Image.java.

ArrayList<Layer> mhr.appcore.image.Image.layers = new ArrayList<Layer>()
| protected

Seznam, který drží reference na všechny vrstvy.

Definition at line 217 of file Image.java.

NBitmap mhr.appcore.image.Image.masterMask
| protected

MasterMask reprezentující výběr.

Definition at line 221 of file Image.java.

boolean mhr.appcore.image.Image.masterMaskActive
| protected

Udává, jestli je masterMask (Výběr) aktivní.

Definition at line 224 of file Image.java.

int mhr.appcore.image.Image.nextId = 0
| protected

Id, které bude přiděleno další vytvořené vrstvě.

Definition at line 218 of file Image.java.

UndoPatch mhr.appcore.image.Image.patch = null
| protected

Záplata pro vrácení poslední úpravy rasterových dat.

Definition at line 240 of file Image.java.

PDImageDataPresentation mhr.appcore.image.Image.pres
| protected

Objekt, který bude obsahovat data potřebná k reprezentaci obrazu a bude sdílen mezi jádrem aplikace a UI.

Definition at line 234 of file Image.java.

int mhr.appcore.image.Image.selectedLayerId
| protected

Id právě aktivní vrstvy.

Definition at line 223 of file Image.java.

ImageSelectedState mhr.appcore.image.Image.selectedState
| protected

Stav výběru, ve kterém se obraz nachází.

Definition at line 222 of file Image.java.

RasterLayer mhr.appcore.image.Image.tmpLayer
| protected

Dočasná vrstva, která nahradí upravovaný výběr.

Definition at line 220 of file Image.java.

LinkedList<Rect> mhr.appcore.image.Image.toBeRendered = new LinkedList<Rect>()
| protected

Průnik udává oblast, kterou je aktuálně potřeba překreslit.

Průnik udává oblast, kterou je aktuálně potřeba překreslit. Bude sloužit jako propojka mezi RenderingTask a ModificationTask. Díky této implementaci nebude Image závislý na jakékoliv práci s vlákny a bude schopen pracovat v prostředí jednoho nebo více vláken.

Definition at line 232 of file Image.java.

int mhr.appcore.image.Image.width
| protected

Šířka obrazu.

Definition at line 214 of file Image.java.

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

- /home/xxx/eclipse_workspaces/app/appcore/src/mhr/appcore/image/Image.java