Android osztály p

Gyakran kell foglalkozni a képek a macskák, amelyek tárolják a JPG, PNG, GIF. Tény, hogy minden kép, amit betölteni egy képfájlt, egy sor színes pontok (pixelek). És információkat minden ponton tárolható bit. Innen a neve - a bit térképen vagy polgári - bitmap. Néha használják a kifejezést raszteres vagy bittérképes képet. Az Android, van egy speciális android.graphics.Bitmap osztály dolgozni az ilyen képeket.

Vannak kész bitmap kép, amely az alábbiakban tárgyaljuk. És annak érdekében, hogy hozzon létre a semmiből egy Bitmap objektumot programozottan, hívja createBitmap () metódus:

Az eredmény egy téglalapot egy előre meghatározott mérete képpontban (az első két paraméter). A harmadik paraméter a felelős az információkat az átláthatóság és a minőségi színes végén (a cikk vannak példák).

Nagyon gyakran meg kell tudni a méretei a képet. Ahhoz, hogy megtudja, a szélesség és a magasság képpontban, használja a megfelelő módszert:

Bitmap.Config

Továbbá méretben, kívánatos, hogy ismerjük a színösszeállítás. A Bitmap osztály van getConfig () metódust. amely visszaadja a felsorolás Bitmap.Config.

Összesen több eleme a felsorolás.

  • Bitmap.Config ALPHA_8 - minden egyes pixel tartalmaz információt csak a szín átlátszósága itt semmi. Minden pixel igényel 8 bit (1 bájt) memória.
  • Bitmap.Config ARGB_4444 - régi konfigurációt, mivel az API 13. Analóg ARGB_8888, mindegyik argB-csak komponens nem allokált 8, és 4 bit. Ennek megfelelően pixel súlya 16 bit (2 bájt). Javasoljuk, hogy használjon ARGB_8888
  • Bitmap.Config ARGB_8888 - mind a 4 pixel argB-komponensek (alfa, piros, zöld, kék) jut a 8 bit (1 bájt). Minden pixel 4 bájt. Ez a legmagasabb minőségű képeket.
  • Bitmap.Config RGB_565 - piros és kék, valamint a komponenst elkülönített 5 bitet (32 különböző értékek) és a zöld - hat bit (64 lehetséges érték). Kép egy ilyen konfiguráció lehet leletek. Minden pixel fogja elfoglalni 16 bit, vagy 2 bájt. A konfiguráció nem tárol információt az átláthatóságot. Ezt fel lehet használni abban az esetben, ha a számok nem követelmény az átláthatóság és a magas minőség.

Configuration RGB_565 nagyon népszerű volt a régebbi eszközök. Ezzel a konfigurációval válik irreleváns növekvő memória és a processzor teljesítménye.

A különbség a minőség a kép jelenik meg a cikk Bitmap minőségű, sávozás és színközelítés.

Mi a bitmap

A legtöbb esetben, akkor ARGB_8888.

Miután megkapta a tárgyat a rendelkezésére álló, akkor az ellenőrzés a minden pontján. Például, festeni kék.

Festeni egy pont, használja a módszert setPixel () (párosított neki getPixel eljárás tudatja Önnel, egy ponttal). A festék a red dot közepén a kék téglalap az előző példában - utánzata a pálya a lézer. Macskák tetszik.

A mi esetünkben, hoztunk létre a bitmap egymástól függetlenül tud hatni rá. De ha készen áll, hogy letölt egy képet egy fájlt, és próbálja felvenni azt a piros pont, akkor előfordulhat összeomlik. A kép lehet megváltoztathatatlan, olyasmi, mint a „Read Only”, emlékszik erre.

Létrehoztunk egy színes téglalapban és kezelése az egyes pontok nem teszik lehetővé, hogy dolgozzon egy alak, nem is beszélve a teljes képet. Bitmap osztály nem rendelkezik saját módszerei rajz, mert van egy módszer Canvas (vászon), amelyen fel tud tenni egy Bitmap objektumot.

Amikor helyet a jelölést tevékenység Kamerák alkatrészek és hozzá az attribútum android: src erőforrás mappa húzható-xxx. A rendszer automatikusan megjeleníti a képet a képernyőn.

Ha kell programozott hozzáférést a bitmap (image) az erőforrás, az alábbi kód:

Fordított folyamat átalakítása Bitmap a húzható:

A kép lehet menteni, például SD-kártyára formájában egy fájlt (egy kódrészletet):

Minden kép pont képviseli, mint egy 4 byte-os egész szám. Először jön a byte átláthatóság - a 0 érték a teljesen átlátszó, és a 255 jelzi a teljes fényelnyelés. A köztes értékeket lehetővé teszi, hogy áttetsző képet. Ez a művészet mestere volt a Cheshire macska, aki ügyesen kezeli az összes pontot a tested, és oldjuk fel a térben, csak a macska mosoly még sokáig lógott a levegőben (valami elkalandoztam).

A következő három bájt felelősek a vörös, zöld és kék, ami működik az elvet. Ie 255 megfelel egy gazdag vörös szín, stb

Mint minden macska kép - ponthalmaz, melynek segítségével getPixels () metódus, akkor kap egy sor pontot, hogy ezen a ponton valami rossz (változtatni átláthatóságának vagy színes), majd egy ehhez kapcsolódó eljárás setPixels (), hogy írjon új adatok vissza a képet. Így lehetséges, hogy átfestés egy fekete macska, fehér, és fordítva. Ha szüksége van egy bizonyos pontján a képet az eljárások getPixel () / setPixel (). Hasonló megközelítést használják számos grafikai szűrők. Megjegyezzük, hogy a művelet helyett minden egyes pont egy nagy kép időt vesz igénybe. Kívánatos, hogy ilyen tevékenységek végzésére egy külön téma.

Ezen alapvető része ismerősök felett bitmap. Most részletesebben.

Tekintettel a korlátozott memória képességeit a mobil eszközök, az egyik kell óvatos, ha Bitmap cél, hogy elkerüljük memóriavesztés. Ne felejtsük el, hogy kiadja forrásokat módszerével recycle (). ha nincs rájuk szükség. Például:

Miért fontos ez? Ha nem gondol memória, akkor kap a hiba OutOfMemoryError. Minden egyes alkalmazás kiosztott korlátozott mennyiségű memória (kupac mérete), a különböző attól függően, hogy a készüléket. Például, 16Mb, 24MB vagy magasabb. Modern eszközök többnyire 24MB vagy nagyobb, de ez nem sok, ha az alkalmazás visszaél grafikus fájlokat.

Bitmap minden egyes képpont tölt általában 2 vagy 4 bájt (attól függően, hogy a kép bites mélység - 16 bit vagy 32 bit RGB_555 ARGB_888). Lehet számítani mennyit költenek erőforrások Bitmap. amely egy rögzített kép egy 5 megapixeles kamera.

A képarány 4: 3 kép ki fog derülni, a felek 2583 x 1936-ban a konfigurációs RGB_555 Bitmap tárgyat vesz 2592 * 1936 * 2 = körülbelül 10 MB, és ARGB_888 (az alapértelmezett üzemmód) 2-szer nagyobb - egy kicsit több, mint 19 MB.

Annak elkerülése érdekében, memória problémák fordulnak módszerek decodeXXX (BitmapFactory osztály).

Ha beállítja largeHeap attribútum a nyilvánvaló, a kiegészítő blokk memória különítenek el a kérelmet.

Lehet, hogy jobb, hogy egy példányt.

Get Bitmap származó Kamerák

Kamerák ha van egy kép, majd kap Bitmap az alábbiak szerint:

De ezzel a módszerrel, akkor óvatosnak kell lennünk. Például, ha a elemet használunk LayerDrawable Kamerák. egy hibaüzenet jelenik meg. Meg lehet próbálni ezt a lehetőséget.

A kifinomultabb változata, hanem a sokkal megbízhatóbb.

Átméretezése - createScaledBitmap () módszer

A createScaledBitmap () metódus változtatni a kép méretét.

Mi lesz a vonat macskák. Képek hozzáadása a források (res / húzható). Az elrendezés növeli a két elem Kamerák

Mi a bitmap

Az utolsó paraméter a módszer megy egy logikai változó, amely felelős a simítás pixel. Általában akkor használjuk, amikor egy kis kép méretét növelni annak érdekében, hogy javítsa a kép minőségét. Ha csökkenti, mint általában, nincs ilyen igény.

Crop - createBitmap () módszer

Számos túlterhelt változatainak Bitmap.createBitmap () metódust. amellyel másolni a képet rész.

  • sreateBitmap (Bitmap forrás, int x, int y, int szélessége, int magasság, Mátrix m, logikai szűrő) - visszaadja egy megváltoztathatatlan bittérképet a részhalmaza a forrás bittérkép, transzformált az opcionális mátrix.
  • createBitmap (int szélesség, magasság int, Bitmap.Config config) - Visszatér a változékony bitmap a megadott szélesség és magasság.
  • createBitmap (Bitmap forrás, int x, int y, int szélessége, int magasság) - visszaadja egy megváltoztathatatlan bittérképet a megadott részhalmazban a forrás bittérkép.
  • createBitmap (int [] színek, int offset, int lépéshossz, int szélessége, int magasság, Bitmap.Config config) - Visszaadja megváltoztathatatlan bittérkép a megadott szélessége és magassága, és minden egyes pixel érték beállítva a megfelelő értéket a színek tömbben.
  • createBitmap (Bitmap src) - visszaadja a megváltoztathatatlan bitmap a forrás bitmap.
  • createBitmap (int [] színek, int szélessége, int magasság, Bitmap.Config config) - Visszaadja megváltoztathatatlan bittérkép a megadott szélessége és magassága, és minden egyes pixel érték beállítva a megfelelő értéket a színek tömbben.

kód alább nem optimális és nagyon erőforrás-igényes. A nagy kép kód lesz nagyon lassú. Feltéve, az Ön esetére. Ahhoz, hogy visszavonja a kép egy részét először létre a kívánt bittérkép meghatározott méretei, rögzített a tömbben, minden pixel az eredeti kép, majd ugyanazt a tömb, hogy visszatér. De, mint azt már kérték más méretű, nem része a pixel lesz a kimenet.

Ennek analógiájára tudjuk következtetni, és a jobb alsó része a kép:

Mi a bitmap
Mi a bitmap

Kissé módosítja a kódot, akkor levágja a központ az eredeti kép. Előre meg kell csinálni néhány egyszerű számításokat.

Screenshot eredmény nem néz fel.

Megváltoztatja a színét minden egyes pixel

Keresztül getPixels () metódus, akkor kap egy tömb összes pixel a raszter, majd a hurok helyett egy bizonyos módon a színe a pixel, és átfestették a kép. Például, hogy a standard alkalmazás ikonját, betette a Kamerák, izvlechom információkat az ikonra decodeResource () metódust. Módszereit saját színe csere, és tegye az eredmény más Kamerák:

A kód az osztály aktivitását:

A screenshot bemutatta az eredeti ikon, és három változatát szín csere.

Mi a bitmap

Egy másik példa, ami szintén a ciklusban változtatni a színét minden egyes pixel Zöld-> Blue, Red-> Green, Blue-> Piros (add meg a képernyőn két Kamerák):

Konvertálása Bitmap egy byte tömböt, majd vissza

Hogyan dekódolni származó Base64 Bitmap

Ha a képet továbbított tiszta szöveget az egész Base64-line, majd a módszer, hogy egy képet ezt a sort:

Kiszámítjuk az átlagos érték színek

további irodalom

A StackOverflow érdekes példája a program generál színes négyzetek az első betű, a szó. Egy példa a tér használják az ikont az alkalmazás. Szintén népszerű ez a technika a listákon. Négyzetek és körök helyére.