2024. április 26., péntek

Gyorskeresés

Andorid fejlesztés – Képek orientációnak megfelelő megjelenítése

Írta: | Kulcsszavak: android

[ ÚJ BEJEGYZÉS ]

Hoztam nektek egy kis okosságot. Az a probléma, hogy Androidon a kamerával készített képek nem mindig helyesen forgatva jelennek meg. Tehát ha a kép fekvő módban lett készítve, akkor álló módban nézve elfordítva jelenhet meg, illetve van olyan készülék ami az álló módban készített képeket is úgy mutatja, mint ami fekvőben készült. Ez készülékenként teljesen kiszámíthatatlan. Megoldás, forgassuk a képet mindig jó irányba, ne bízzunk a kamerában!

Alábbi kód megadja, hogy a path útvonalon lévő képfájl milyen orientációban készült.

public static int getAngleForImage(String path) {
int angle = 0;
try {
ExifInterface exif = new ExifInterface(path);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);

if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
angle = 90;
}
else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
angle = 180;
}
else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
angle = 270;
}
} catch (Exception e) {

}
return angle;
}

Használata kódban:

Matrix mat = new Matrix();
mat.postRotate(Util.getAngleForImage(imageFile.getAbsolutePath()));

Fenti kóddal készítettünk egy Matrix példányt ami a forgatást elvégzi majd. Az imageFile a képfájlra mutató File példány, mivel másra is használom, ezért nem csak sima String. Ezzel viszont még nincs vége, valahogy rá kell húzni ezt a képre:

Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), options);

Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), mat, true);
mImageView.setImageBitmap(rotatedBitmap);

bitmap példányba kerül az eredeti kép, az options pár beállítás, mivel szeretem olyan sample sizeban kérni a képet ami a kijelzőnek megfelel. Bővebben erről: [link]

Ezután csinálunk egy másik Bitmap példányt amihez az eredetit használjuk, de alkalmazzuk rá a mátrixműveleteit is.

Eredményét pedig beadjuk az ImageView-nak, ahol már jó irányban meg a kép.

Tesztelve:
- ZTE Blade
- Samsung Galaxy Nexus
- Samsung Galaxy 3

Hozzászólások

(#1) KaiotEch


KaiotEch
nagyúr

Ühüm újból megerősített a szabályt, hogy miért nem lettem programozó.

(#2) Sianis válasza KaiotEch (#1) üzenetére


Sianis
addikt

Nem olyan haláli dolog ez, csak alázat kell hozzá, mint minden más szakmához. :)

Sianis

(#3) szoke12 válasza Sianis (#2) üzenetére


szoke12
őstag

Köszönjük, bár egyenlőre csak a magyar szöveget értem, annak is inkább csak egy részét. :DDD

"Élj úgy, hogy ha majd lepereg előtted életed filmje, érdemes legyen végignézni!"

(#4) Vladi válasza Sianis (#2) üzenetére


Vladi
nagyúr

Nahát kit fúj erre a szél... :R

Végre tudom mivel is foglalkozol. ;]

Nem félünk! Nem félünk! Itthon vagyunk e földön. Nem félünk! Nem félünk! Ez nem maradhat börtön!

(#5) WonderCSabo


WonderCSabo
félisten

Az if-else helyett mondjuk egyszerűbb lett volna switch-el, de mindegy. Köszi a leírást, elvileg szeptembertől fogok el kezdeni android programozással foglalkozni, asszem majd vissza fogok nézni ide. :)

(#6) nova001


nova001
senior tag

Sziasztok

szeretném a gyári ftf fájlból kitörölni egy két appot. Sikerült kimenteni a system.sin fájlt, abból kinyertem az ext4 fájlt amit kicsomagoltam és kitöröltem a felesleges .apk fájlokat.kérdésem hogyan lehet befordítani hogy flashtoolal feltudjam rakni a telefonra.

Xperia X készülékről beszélek

Köszi

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.