Moin Leute,
ich benutze die Fotoapparat.io lib um Fotos aufzunehmen. Seitens fotoapparat wird ein BitmapPhoto Object erstellt, was die Aufnahme beinhaltet.
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
}
});
}
Alles anzeigen
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:
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);
}
}
)
Alles anzeigen
mit 1.0 als scale Faktor verzerrt das Bild und und mit 1.3F wird die sollAufloesung verändert.
Jemand eine Idee?