Neu
ich benutze die Fotoapparat.io lib um Fotos aufzunehmen. Seitens fotoapparat wird ein
BitmapPhoto
Object erstellt, was die Aufnahme beinhaltet.Java-Quellcode
- private void takePicture() {
- PhotoResult photoResult = fotoapparat.takePicture();
- photoResult
- .toBitmap(
- new Function1<Resolution, Resolution>() {
- @Override
- public Resolution invoke(Resolution resolution) {
- float scale768 = (float) 768 / (float) resolution.width;
- return scaled(scale768).invoke(resolution);
- }
- }
- )
- .whenDone(new WhenDoneListener<BitmapPhoto>() {
- @Override
- public void whenDone(@Nullable BitmapPhoto bitmapPhoto) {
- // Zeige photo in ImageView
- }
- });
- }
Das klappt auch soweit mit dem Aufnehmen im Großen und Ganzen. Es ist in voller Auflösung, auf älteren Geräten führts da häufig zu
OutOfMemoryException
... uuuund ich brauchs nicht so groß.Ich würde gerne die Aufnahmen unabhängig von ursprünglicher Sensorgröße und Verhältnis, die lange Seite auf 768 pixel und die kurze im entsprechenden Verhältnis abspeichern. Der obige Code funktioniuert nicht für alle Sensoren, ältere Geräte bekommen nicht exakt 768 pixel, mal leicht drüber oder drunter - je nach Auflösung.
Für eine exakte Auflösung habe ich folgendes:
Java-Quellcode
- photoResult.toBitmap(
- new Function1<Resolution, Resolution>() {
- @Override
- public Resolution invoke(Resolution resolution) {
- int width = 768; // hier mal 4:3
- int height = 576; // Das echte Verhältnis berechne ich Anhand resolution Parameters oben, hier mal der Einfachheit 4:3
- Resolution sollAufloesung = new Resolution(width, height);
- return scaled(1.0F).invoke(sollAufloesung);
- }
- }
- )
sollAufloesung
verändert.Jemand eine Idee?