App
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 LayergetClassFor (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< Layerlayers = 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< RecttoBeRendered = 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);
selectedState = ImageSelectedState.SELECTED_LAYER;
tmpLayer = (RasterLayer) createLayer(RasterLayer.class);
masterMask = new NBitmap(new BitmapInfo(width, height, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
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);
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);
}
} catch (ImageLoadingException e) {
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 {
}
}
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 (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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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()) {
if (pres != null) {
synchronized (pres) {
if (patch.getState() != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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 {
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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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 (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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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
clsTří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);
}
}
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;
}
for (Layer l : layers) {
l.cropTo(r);
}
if (patch != null) {
patch = null;
}
if (clipBoard != null) {
clipBoard = null;
}
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()));
}
}
}
}
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);
if (pres != null) {
synchronized (pres) {
pres.removeLayer(layerId);
}
}
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();
if (patch != null) {
}
if (clipBoard != null) {
}
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);
if (pres != null) {
synchronized (pres) {
LayerPDInfo inf = new LayerPDInfo(pres);
nl.updateInfo(inf);
pres.addLayerInfo(inf, layerId);
}
}
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 {
Blender.addTo(target, masterMask, target.getRect(), 0, 0);
} else {
target.fill(target.getRect(), 0xFFFFFFFF);
}
} catch (IllegalArgumentException e) {
tmpPatch.dispose();
return;
}
if (patch != null) {
patch = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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.

{
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 (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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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 {
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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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.

{
}
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();
if (pres != null) {
}
}
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);
}
}
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) {
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;
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 (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 = tmpPatch;
}
if (pres != null) {
synchronized (pres) {
if (item != ImageSelectedState.SELECTED_MASTER_MASK) {
} 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 = tmp;
tmp = new NBitmap(new BitmapInfo(nWidth, nHeight, ChannelCount.SINGLE_CHANNEL, depth, ColorMode.MONO, false));
Interpolator.resampleTo(masterMask, tmp, iType, force);
masterMask = tmp;
tmpLayer.resizeTo(nWidth, nHeight, iType, force);
for (Layer l : layers) {
l.resizeTo(nWidth, nHeight, iType, force);
}
if (patch != null) {
patch = null;
}
if (clipBoard != null) {
clipBoard = null;
}
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()));
}
}
}
}
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);
}
}
void mhr.appcore.image.Image.setLayerOpacity ( int  layerId,
double  opacity 
) throws LayerNotFoundException
inline

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

Parameters
layerId
opacityPrů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);
}
if (l.isVisible()) {
}
}
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);
}
}
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) {
}
}
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) {
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);
}
}
}
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) {
}
switch (state) {
case SELECTED_NONE:
// Toto by nemel byt spravny zpusob uziti
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:
addChangedArea(getRect()); // Kvůli náhledu masky
break;
default:
}
selectedState = state;
if (pres != null) {
synchronized (pres) {
}
}
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.");
}
if (commit) {
if (patch != null) {
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: {
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);
break;
}
default:
break;
}
} else {
}
canvasOwner = null;
if (pres != null) {
synchronized (pres) {
if (selectedState != ImageSelectedState.SELECTED_MASTER_MASK) {
} else {
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 = 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;
}
BitmapInfo i = source.getInfo();
clipBoard = new NBitmap(i);
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));
}
}

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: