Obrázky podporují balíčky: java.applet java.awt ~.image ~.renderable

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Počítačová grafika Nám umožňuje:
Vytvoření dokumentu bylo financováno ze zdrojů Evropského sociálního fondu a státního rozpočtu ČR. Název projektu: Výuka programování na střední škole.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Funkce Připomeňme si program pro výpočet faktoriálu:
Počítačové hry a animace Cvičení 2. (2) Osnova Vstup od uživatele – –Myš – –Klávesnice – –Joystick Content pipeline – –Assety – –Content processory 3D.
Základní škola a mateřská škola Bzenec Číslo projektu: CZ.1.07/1.4.00/ Číslo a název šablony klíčové aktivity: III/2: využívání ICT – inovace Vypracoval/a:
Programování 2 Cvičení 5.
Pole, ukazatele a odkazy
Úvod Formát SVG Aplikace sSVGui Ukázka aplikace Závěr.
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Transformace souřadnic 2D a 3D
C# - struktury, výčtové typy, pole
Referát č. 18 Počítačová grafika, prezentace (základní pojmy a principy z oblasti počítačové grafiky, grafické a multimediální formáty, jejich vlastnosti.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
PRÁCE S PROUDY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Grafické formáty.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Předmět: Počítačová grafika 1 (PGRF1) Přednáška č
Počítačová podpora konstruování I 4. přednáška František Borůvka.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Rastr a transformace v 2D
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Gymnázium, Broumov, Hradební 218 Tematická oblast: Informační a komunikační technologie Číslo materiálu: E Název: Počítačová grafika - teorie Autor:
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Úvod do 3D geometrie První přednáška mi vyšla na 90 minut po slajd 31 (3D representace modelů). Ten zbytek jsem pak prolítnul tak za pět minut, ale myslím.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
GRAFIKA.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Digitální výukový materiál zpracovaný v rámci projektu „EU peníze školám“ Projekt:CZ.1.07/1.5.00/ „SŠHL Frýdlant.moderní školy“ Škola:Střední škola.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Počítačová grafika a prezentace
Rastrová grafika Výpočetní technika.
Sedmé cvičení Soubory Vstupně/výstupní proudy. Java cv72 Soubory Třída File Objekt popisující soubor na filesystému Nedá se z něho přímo číst a psát Představuje.
Šesté cvičení Výjimky Balíky.
VISUAL BASIC PRALG.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
Způsoby uložení grafické informace
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
:: java advanced imagingds :: 36APG - JAI david sedláček javaai/jai/index.html.
Uživatelem definované typy Ing. Lumír Návrat  katedra informatiky, A 1018 
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Rastrová grafika (bitmapová) Obrázek poskládaný z pixelů Televize, monitory, fotoaparáty Kvalitu ovlivňuje barevná hloubka a rozlišení Barevná hloubka.
Martina Braunerová.  obrázek je složen ze základních geometrických tvarů (body, přímky, křivky, mnohoúhelníky)  je možné libovolné zmenšování či zvětšování.
PJV08 1 GUI (Graphical User Interface)‏ Vizuální a interaktivní komunikaci počítač-člověk podporují balíčky: java.awt - obsahuje: - komponenty: knoflíky,
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
Applety Applet ( Application program–let ) je javský program upravený ke spuštění v klientově prohlížeči ( browseru ). Prohlížeč je aplikace ( application.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
VY_32_INOVACE_PR2_16 Grafika.
Návrhový vzor Flyweight
GRAFIKA.
Polymorfismus = Mnohotvarost
Bridge.
Reflexe jako introspekce
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Kinematika hmotný bod: těleso s nekonečně malými rozměry, ale nenulovou hmotností, tj. žádné otáčení, žádná deformace atd. = bodová hmotnost popis pohybu.
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Transkript prezentace:

Obrázky podporují balíčky: java.applet java.awt ~.image ~.renderable javax.swing javax.imageio ~.event ~.metadata ~.plugins.jpeg ~.spi ~.stream ~.plugins.bmp ( od verze 1.5 ) Obrázky jsou zakódované soubory pixelů uložené lokálně či na síti, často dosti rozsáhlé a v různých formátech. Podporují se formáty: GIF, PNG, JPEG, BMP, WBMP,. ( Pozor na ztrátové. ) Jejich stahování, zpracování, vykreslení ( rendering ) či zápis je náročné. Programátor nemá přímý přístup k obrazové paměti. Využívá se multithreadová a proudová taktika. Obrázky a zvuky jsou bezpečné objekty, neb nemohou počítač narušit. PJV12

java.awt.image Component ImageObserver ImageConsumer ImageProducer Filter Pixel Grabber Filtered ImageSource Buffered ImageFilter Memory ImageSource RenderableImage java.awt CropImage Filter Runnable javax.swing Renderable ImageOp RGBImage Filter GrayFilter ~.renderable Renderable ImageProducer Replicate ScaleFilter AreaAveraging ScaleFilter ~.renderable ContextualRendered ImageFactory RenderableImage lRendered ImageFactory ~.renderable Renderable ImageOp PJV12

WritableRenderedImage java.awt.image Sample Model java.awt RasterOp Image Band CombineOp MultiPixelPacked SampleModel Volatile Image Buffered Image Affine TransformOp SinglePixelPacked SampleModel java.awt Transparency WritableRenderedImage Color ConvertOp Component SampleModel ColorModel RenderedImage ConvolveOp Banded SampleModel Component ColorModel LookupOp PixelInterleaved SampleModel Index ColorModel RescaleOp Packed ColorModel Direct ColorModel BufferedImageOp PJV12

java.awt.image Raster Kernel Buffer Strategy Data Buffer Lookup Table TileObserver Kernel Writable Raster Buffer Strategy Data Buffer Lookup Table DataBuffer Byte DataBuffer Int ByteLookup Table DataBuffer Float DataBuffer Double ShortLookup Table DataBuffer Short DataBuffer UShort PJV12

javax.imageio ImageIO IIOImage Image Reader Image Writer IIOParam ImageTrancoder IIOParamController ImageIO Image Reader Image Writer IIOImage IIOParam ~.plugins.jpeg Image ReadParam JPEGImage ReadParam JPEGQT Image WriteParam JPEGImage WriteParam JPEG HuffmanTable BMPImage WriteParam PJV12

javax.imageio.stream DataInput DataOutput IIOByte Buffer ImageInput java.io java.io DataInput DataOutput IIOByte Buffer Image InputStream Image OutputStream ImageInput StreamImpl ImageOutput StreamImpl FileImage InputSream FileImage OutputSream FileCacheImage InputSream FileCacheImage OutputSream MemoryCache ImageInputSream MemoryCache ImageOutputSream PJV12

Příklad vykreslení obrázku v aplikaci public class ImageLoad extends Frame { Toolkit tk = Toolkit.getDefaultToolkit( ); Image img1 = tk.getImage( "C:\\...\\im1.gif" ); Image img2 = tk.getImage( new URL( "http:\\...\\im2.jpeg" ) ); int x1=…, y1=…, x2=…, y2=…, w2=…, h2=… ; public ImageLoad( ) throws Exception { MediaTracker mt = new MediaTracker( this ); mt.addImage( img1, 123 ); // unique id is also priority mt.addImage( img2, 456 ); // unique id is also priority mt.waitForAll( ); this.setBounds( 100, 100, 200, 200 ); this.setVisible( true ); } public void paint( Graphics g ) { g.drawImage( img1, x1, y1, this ); // this odkazuje na Observer g.drawImage( img2, x2, y2, w2, h2, this ); PJV12

Interfejs java.awt.Observer ToolKit .gif .jpg .png bit flags 128 ABORT – zrušeno před dokončením 32 ALLBITS – úspěšně dokončeno 64 ERROR & ABORT – chyba a zrušení 16 FRAMEBITS – část dokončena 2 HEIGHT – výška již známa 4 PROPERTIES – vlastnosti již známy 8 SOMEBITS – potřebny další bity 1 WIDTH – šířka již známa tk.getImage( string / url ) Image void g.drawImage( im, ... , observer ) notification @override boolean imageUpdate( im, flags, x, y, w, h ) { .... Ta je konkrétní již v java.awt.Component. } PJV12

Image vs. pole pixelů Application Applet Memory ImageSource Pixel getImage( ) MediaTracker (Component) this createImage( ) Applet getImage( ) ImageProducer Memory ImageSource int [ width*height ] ImageConsumer Pixel Grabber grabPixels( ) Image height getSource( ) width 0 – transparent 255 - opaque A R G B prod cons PJV12

Image Producer, Consumer, Filter Applet ap; Toolkit tk; Image im; ImageProducer prod; ImageConsumer cons; ImageFilter filter; int pix[ ] = new int[ w * h ]; // pole ARGB im = ( (Component) this ).createImage( prod ); // vytvoření image im = ap.getImage( url ); // získání v apletu im = tk.getImage( url ); // získání v aplikaci prod = im.getSource( ); prod = new FilteredImageSource( prod, filter ); prod = new MemoryImageSource( w, h, pix, off, scan ); PixelGrabber pg = new PixelGrabber( im, x, y, w, h, pix, off, scan ); boolean b = pg.grabPixels(); // spuštění filter = new CropImageFilter( x, y, w, h ); filter = new MyRGBFilter( ... ); // potomek RGBFilteru PJV12

Filtrování Image im0 = … ; ImageProducer prod0 = im0.getSource( ); ImageFilter filter1 = new CropImageFilter( 50, 50, 100, 100 ); ImageProducer prod1 = new FilteredImageSource( prod0, filter1 ); ImageFilter filter2 = new MyRGBFilter( ... ); ImageProducer prod2 = new FilteredImageSource( prod1, filter2 ); Image im2 = this.createImage( prod2 ); // na objektu typu Component class MyRGBFilter extends RGBImageFilter { int anotherRGB; public MyRGBFilter( ... ) { ... } public int filterRGB( int x, int y, int rgb ) { ... return anotherRGB; } PJV12

Zápis a načtení obrázku import java.awt.image.*; import javax.imageio.*; import java.io.*; BufferedImage im = new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB ) ; Graphics g = im.getGraphics( ); g.fillXXX… ; // create some graphics g.setColor… ; g.drawXXX… ; boolean b = ImageIO.write( im, "gif", new File( "pic123.gif" ) ); System.out.println( b ); … Image im2 = ImageIO.read( new File( "pic123.gif" ) ); PJV12

Čtení, úprava a zápis obrázku import java.awt.*; import java.awt.image.*; import java.io.*; import javax.imageio.*; class ReadModifyWrite { public static void main( String[ ] args ) { Image im1 = ImageIO.read( new File( " … .gif " ) ); // read int w = im1.getWidth( null ), h = im1.getHeight( null ); int [ ] pix = new int [ w*h ]; PixelGrabber pg = new PixelGrabber( im1, 0, 0, w, h, pix, 0, w ); pg.grabPixels( ); change( pix, w ); // modify pixel array somehow BufferedImage im2= new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB ); for ( int i = 0; i < pix.length; i++ ) im2.setRGB( i % w, i / w, pix[ i ] ); boolean b = ImageIO.write( im2, "jpg", new File ( " … .gif " ) ); // write }} PJV12

Natažení obrázku ImageIcon Obrázky mohou být jak externí, tak i součástí aplikace ( které se dostanou automaticky do classes resp. jar). import javax.swing.*; import javax.awt.*; ImageIcon ic = new ImageIcon("C:/ … .gif ", "description" ); // příp. URL Image img = ic.getImage( ); // např. pro Graphics JButton b = new JButton( ); // příklad použití b.setIcon( ic ); b. setVerticalTextPosition( SwingConstants.BOTTOM ); b.setText( ic. getDescription( ) ); PJV12

Rovinná geometrie Geometrie v awt je příliš jednoduchá - jen s hodnotami typu int. Balíčky java.awt.geom a java.awt umožňují hodnoty float a double pomocí dvojice statických tříd .Float a .Double vnořených ( nested ) v abstraktních třídách Point2D, Line2D, Rectangle2D atd. Výpočet probíhá v typu double, typ float je jen pro úsporu paměti a času. K vykreslení slouží abstraktní třída Graphics2D, jež přetypováním se získá např. takto: Rectangle2D r = new Rectangle2D.Double( x, y, w, h ); public void paint( Graphics g ) { Graphics2D g2 = ( Graphics2D ) g; g2.draw( r ); } PJV12

java.awt.geom & java.awt Area Point Graphics Shape Shape Line2D Affine Transform Rectangular Shape Shape Graphics 2D Line2D Area Arc2D D/F D/F Point2D Quad Curve2D Polygon Ellipse2D D/F D/F D/F Point Cubic Curve2D Round Rectangle2D D/F D/F javax.swing.plaf 1.6 Dimension 2D Path2D Rectangle2D UIResource PathIterator D/F D/F javax.swing.plaf Dimension Dimension UIResouce GeneralPath Flattening PathIterator Rectangle extends Path2D.Float java.awt. D/F - static nested classes .Double / .Float ~ dva vnoření konkrétní potomci PJV12

Interfejs Shape ( útvar ) Obecně definuje metody geometrického útvaru : boolean contains( ... ) – obsahuje bod či obdélník ? Rectangle getBounds( ... ) – omezující obdélník. PathIterator getPathIterator( ... ) – získání iterátoru. boolean intersects( Rectangle2D r ) – existuje průnik s obdélníkem ? Pro posouzení vnitřku se implicitně Shape chápe jako Area. PJV12

Finální třída GeneralPath umožňuje vytvořit obecnou, orientovanou křivku ( a to i nesouvislou ) z lineárních, kvadratických, kubických ( Bézierových ) a segmentů typu Shape, tj. různých útvaru a obrazců. Dále umožňuje: void append( PathIterator pi, boolean connect ) – přidání segment;. void append( Shape s, boolean connect ) – přidání útvaru. void closePath() - křivku uzavřít. boolean contains( ... ) – zjistit zda obsahuje bod či obdélník. Rectangle getBounds( ... ) – omezující obdélník. boolean intersects( Rectangle2D r ) – zjistit průnik s obdélníkem. int getWindingRule( ) – zjištění zavíjecího pravidla. void setWindingRule( int wr ) - nastavení zavíjecího pravidla: WIND_EVEN_ODD nebo WIND_NON_ZERO. void moveTo( double x, double y ) - přesun. void lineTo( double x, double y ) – přidání lineárního segmentu. void transform( AffineTransform at ) – afinní transformace. PJV12

Winding rules čili zavíjecí pravidla WIND_NON_ZERO WIND_EVEN_ODD Uvnitř: právě tehdy nerovná-li se počet polopřímky průsečíků zleva počtu průsečíků zprava. Uvnitř: právě tehdy je-li počet polopřímky průsečíků lichý. PJV12

Další třídy Point2D - vzdálenost dvou bodů. Line2D - intersekce s úsečkou a obdélníkem, - vzdálenost bodu od úsečky a přímky. Rectangle2D - vytváření minimálního rámce pro bod a obdélník, - test zda je bod či obdélník uvnitř, - kde v okolí je bod, - intersekce s úsečkou. Ellipse2D - test zda je bod či obdélník uvnitř, - test na průnik s obdélníkem. Arc2D - test zda je bod či obdélník uvnitř, Area - sjednocení a intersekce oblastí, - sčítání a odčítání oblastí, - test zda je bod či obdélník uvnitř. - afinní transformace. - test na singularitu, polygonalitu, rektangularitu. PJV12

PathIterator a FlatteningPathIterator Interfejs PathIterator umožňuje získat obrys objektů typu Shape a procházet ho po segmentech. int currentSegment( ... ) – vrátí charakteristiky a typ segmentu SEG_... typy segmentů jsou int static final SEG_CLOSE=0, SEG_MOVETO=0, SEG_LINETO=1, SEG_QUADTO=2, SEG_CUBICTO=3. int getWindingRule( ) – vrací hodnotu zavíjecího pravidla: 0 - WIND_EVEN_ODD constant. 1 - WIND_NON_ZERO constant. boolean isDone( ) – konec iterace void next( ) - další krok Konkrétní třída FlatteningPathIterator implementuje PathIterator, avšak zplošťuje nelineární segmenty tak, že je vydává jen jako řadu lineárních. PJV12

Afinní transformace Třída AffineTransform vytváří lineární transformátory 2D souřadnic, které zachovávají úsečky, paralelitu a dělící poměry. Transformace lze konkatenovat, pre-konkatenovat a invertovat. Transformovat lze body, pole bodů, pole souřadnic a objekty splňující interfejs Shape. Posun ( translation ), škálování ( scaling ), překlopení ( flip ), rotace ( rotation ) a úkos ( shear ) se vyjadřují jedinou matici: x’ m00 m01 m02 x m00x+m01y+m02 y’ = m10 m11 m12 * y = m10x+m11y+m12 1 0 0 1 1 1 m02, m12 - translace m00, m11 - scaling, překlopení m00, m01, m10, m11 – rotace PJV12

Transformace (1, 0, 0, 1, tx, ty) tx, ty>0 right and down Translation: 1 0 tx 0 1 ty 0 0 1 (1, 0, 0, 1, tx, ty) tx, ty>0 right and down Rotation: cos( fi ) -sin( fi ) 0 sin( fi ) cos( fi ) 0 0 0 1 (cos, sin, -sin, cos, 0, 0) fi > 0 clockwise (radian) Scaling: sx 0 0 0 sy 0 0 0 1 (sx, 0, 0, sy, 0, 0) sx, sy>1 greater negative / flip Shear: 1 shx 0 shy 1 0 0 0 1 (1, shy, shx, 1, 0, 0) PJV12

Třída java.awt.geomAffineTransform Počátek souřadnic je levý horní roh komponenty – leč osa y je převrácená – je to překlopený první kvadrant a tedy rotace pro úhel > 0 je ve směru hodinových ručiček. Řada konstruktorů a metod usnadňuje definici a změny transformační matice: void translate( ... ) void setToTranslate( ... ) at=getTranslateInstance( ... ) void rotate( ... ) void setToRotate( ... ) at=getRotateInstance( ... ) void scale( ... ) void setToScale( ... ) at=getScaleInstance( ... ) void shear( ... ) void setToShear( ... ) at=getShearInstance( ... ) AffineTransform createInverse( ) void concatenate( AffineTransform at ) void preConcatenate( AffineTransform at ) K provedení transformace slouží metody: void transform( ... ) void deltaTransform( ... ) - transformace bez translační složky void inverseTransform( ... ) – zpětná transformace Shape createTransformedShape( Shape s ) PJV12

Příklad rotace double x= , y= , w= , h= , fi= ; // all values are positive Rectangle2D.Double r = new Rectangle2D.Double( x, y, w, h ); Area a = new Area( r ); AffineTransform t = new AffineTransform( ); a.transform( t.getRotateInstance( fi, x, y ) ); // x, y ... centre of rotation public void paint( Graphics g ) { Graphics2D g2= ( Graphics2D ) g; g2.fill( r ); g2.setColor( Color.RED ); g2.fill( a ); } 0,0 y x w f i h PJV12