bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
android_imatges

Aquesta és una revisió antiga del document


Tractament d'imatges en Android

En aquest article veurem com capturar imatges amb Android utilitzant la càmera del mòbil, i com emmagatzemar les dades en el sistema d'arxius.

android-camera.jpg

Referències:

Us de la càmera

Aquest article de la pàgina oficial d'Android ens explica com capturar imatges amb la pròpia aplicació de la càmera del mòbil.

ULL! Mira el tutorial "photobasics" d'Android en anglès. La versió en castellà conté errors.

Hauràs de canviar manualment l'idioma a dalt a la dreta.

El tutorial utilitza la app Camera del sistema operatiu. Així, no farem la foto dins la pròpia aplicació, sinó que la farà la Càmera (amb un Intent + setActivityForResult) i després haurem de gestionar el resultat (amb una callback).

android-camera-intent.jpg

Tenim, dins el mateix tutorial, 2 aproximacions:

  1. Miniatura:
    • Si cridem la càmera amb un Intent sense cap extra ens retornarà un Bitmap amb el thumbnail (miniatura) de la foto.
    • Té poca resolució, però és força senzill d'implementar i per moltes aplicacions ens resulta suficient.
    • Addicionalment al què hi ha al tutorial, podeu afegir l'enregistrament de la foto en un arxiu de l'espai de la nostra pròpia app mitjançant el mètode Bitmap.compress
  2. Full-size:
    • Caldrà donar-li una indicació a la app Camera d'on guardar l'arxiu.
    • Necessitem un FileProvider dins la nostra app (arxiu AndroidManifest.iml).
    • Un cop cridem la app Camera ella mateixa guardarà l'arxiu on li haguem dit (sigui a l'espai de la nostra app, o al carret de fotos (DCIM) compartit del sistema operatiu).
    • ULL! Quan iniciem la càmera i li demanem que ens guardi la foto en full-size no rebrem el thumbnail en la callback de tornada (amb el què el codi previ probablement petarà).


Exercici: captura bàsica d'imatge amb miniatura

Pràctica elemental de captura d'imatge. En aquest exercici no guardarem la imatge en disc, però la podem mostrar en un ImageView.

  • Crea un aplicació simple amb un Button (captura foto) i un Image View.
  • Segueix les indicacions de l'article de captura d'imatges (en anglès!) que crea el Intent i mostra la miniatura.
  • Caldrà implementar 2 funcions a la teva Activity:
    • dispatchTakePictureIntent : crearà un Intent per cridar la càmera. Pots cridar aquesta funció des del OnClickListener del botó. Aquesta funció pot tenir qualsevol nom o fins-i-tot pots incrustar el codi dins el OnClickListener.
    • onActivityResult : aquesta funció de l'Activity rebrà les dades de la càmera. És obligat que es digui així la funció per poder ser cridada correctament. En aquesta funció és on hem de capturar el bitmap i mostrar-lo a la ImageView.

Persistència del thumbnail:

  • Amb el Bitmap que ens retorna l'aplicació, enregistra la foto al sistema d'arxius.
    • Crea un File sobre l'àrea interna d'emmagatzemament amb Context.getFilesDir() (llegeix mes avall).
    • Obre un FileOutputStream sobre el fitxer.
    • Utilitza Bitmap.compress per volcar el contingut del thumbnail sobre el fitxer.
  • Utilitza el Device File Explorer per visualitzar si el teu arxiu s'ha creat correctament (recorda prémer «actualitzar» abans de comprovar-ho).
  • Recupera la imatge sobre el ImageView quan iniciem l'aplicació de nou.
    • La forma més simple és amb la funció ImageView.setImageURI i assignar-li la Uri de l'arxiu.


Exercici: fotos full-size a l'àrea externa

Seguirem el tutorial oficial de fotos d'Android a partir de la secció "Save full-size photo".

Modifica l'aplicació de l'exercici anterior per aconseguir guardar la foto a full-size:

  • Fes un commit amb tag (per després fer una release) al Git abans de continuar.
  • Per activar que la càmera faci l'enregistrament full-size caldrà que adjuntem la Uri del fitxer al Intent mitjançant un putExtra (fixa't en l'exemple).
  • Caldrà utilitzar FileProvider per autoritzar a l'app Camera a utilitzar els arxius de la nostra app (sigui a l'àrea externa o interna).
  • De moment no facis un nom d'arxiu dinàmic (amb data i hora, com es fa a l'exemple). Un nom fixe ens serveix per aquesta mini-app.
  • Per tal que el codi anterior no peti caldrà que comentis o eliminis el què tens a onActivityResult ja que ja no ens arribarà cap thumbnail o miniatura.
  • Visualitza el resultat de la foto. Quin problema tenim?

Ajusta el tamany de la foto a la ImageView per fer que càpiga dins l'àrea marcada al layout.

  • Pots seguir les indicacions a la secció "Decode a scaled image" del propi tutorial «photobasics».
  • Probablement el codi per ajustar i mostrar la foto et peti si està al onCreate. En primer lloc, perquè el primer cop no hi haurà imatge. El segon cop, petarà perquè durant el onCreate el valor de l'alçada i amplada del ImageView és zero. Per solventar-ho, aquest article proposa la solució d'actualitzar la imatge al mètode onWindowFocusChanged enlloc de fer-ho al onCreate (tampoc funciona al onStart ni al onResume).


android_imatges.1665398505.txt.gz · Darrera modificació: 2022/10/10 10:41 per enrique_mieza_sanchez