Ich habe eine App für Android 4.0 und höher entwickelt. (Die App unterstützt keine Android-Versionen unter 4.0 [Ice Cream Sandwich]).Android - Wie erhalte ich DPI (dots per inch) von JPEG-Dateien beim programmgesteuerten Laden oder Speichern?
Die Frage bezieht sich auf (Druck) DPI verschiedener Bilder (für zB JPEG oder PNG) Format.
Diese Frage bezieht sich NICHT auf SCREEN DPI oder Größen verschiedener Android-Geräte. Es bezieht sich auch NICHT darauf, das Bitmap auf dem Gerät in Bildschirmgröße anzuzeigen.
Ich verwende den folgenden Code, um die Bilddatei in 'Bitmap' zu laden. Dann habe ich es mit jpegCompression zugeschnitten und in eine andere Datei im JPEG-Format gespeichert. Ich war in der Lage, dies durch den folgenden Code zu tun, aber ich bin nicht in der Lage, DPI geladen zu bekommen oder die DPI der gespeicherten Bilddatei einzustellen.
Also habe ich zwei Fragen.
1) Wie kann ich die (Druck) DPI aus der JPEG-Datei erhalten, nachdem oder während sie in 'Bitmap' geladen wurde?
2) Wie kann ich beim Speichern der neu generierten 'Bitmap' die DPI erneut in der JPEG-Datei einstellen?
Folgendes ist der Teil des Codes als Referenz.
FileInputStream inputStream = new FileInputStream(theSourcePhotoFilePathName);
Bitmap bitmap = null;
BitmapRegionDecoder decoder = null;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
options.inDensity = 300; // Tried this but not working.
try {
decoder = BitmapRegionDecoder.newInstance(in, false);
bitmap = decoder.decodeRegion(region, options); // the region has cropping coordinates.
} catch (IllegalArgumentException e){
Log.d("First Activity", "Failed to recycle bitmap for rect=" + region, e);
} catch (IOException e) {
Log.d("First Activity", "Failed to decode into rect=" + region, e);
} finally {
if (decoder != null) decoder.recycle();
}
inputStream.close();
inputStream = null;
FileOutputStream fos = new FileOutputStream(theTargetTempFolderDestFilePath);
bitmap.compress(CompressFormat.JPEG, jpegCompressionRatio, fos);
fos.flush();
fos.close();
fos = null;
Ich habe versucht, durch googeln, von Stackoverflow und von anderen Websites zu finden, aber nicht die richtige verwandte Antwort bekommen kann. Also habe ich mich entschieden, es in diesem Forum zu stellen.
Ihre Hinweise und Vorschläge sind willkommen.
Sanjay.
Gr8, konnte ich das Gleiche zu tun, indem Sie die Bibliothek von Drittanbietern sanselanandroid verwenden. Aber diese Methode ist besser und schneller. Dieser Ansatz ändert die Daten in Exif-Informationen. Mit diesem Ansatz können wir die JPEG 'X-Auflösung' und 'Y-Auflösung' ändern, wobei das Bild ohne Thumbnail ist. Als ich es mit Fotos probierte (von einer professionellen Kamera, die ein Thumbnail und mehr Exif-Informationen hatte), war ich ** nicht in der Lage, das DPI sowohl direkt als auch auf Sanselan einzustellen. – SHS