Android 4.0 이상에서 개발 된 앱이 있습니다. (이 앱은 4.0 [Ice Cream Sandwich] 이하의 Android 버전을 지원하지 않습니다.)안드로이드 - 프로그래밍 방식으로 JPEG 파일을로드하거나 저장하는 동안 JPEG 파일의 DPI (dots per inch)를 얻거나 설정 (인쇄)하는 방법은 무엇입니까?
질문은 다양한 이미지 (예 : jpeg 또는 png) 형식의 (인쇄) DPI와 관련이 있습니다.
이 질문은 SCREEN DPI 또는 다양한 Android 기기의 크기와 관련이 없습니다. 또한 화면 크기로 장치에 비트 맵을 표시하는 것과 관련이 없습니다.
다음 코드를 사용하여 이미지 파일을 '비트 맵'에로드하고 있습니다. 그런 다음 jpegCompression을 사용하여 JPEG 형식의 다른 파일에 저장했습니다. 다음 코드로이 작업을 수행 할 수 있지만로드 된 DPI를 가져올 수 없거나 저장된 이미지 파일의 DPI를 설정할 수 없습니다.
그래서 두 가지 질문이 있습니다.
1) '비트 맵'으로로드 한 후 또는로드하는 동안 JPEG 파일에서 (프린트) DPI를 가져 오는 방법은 무엇입니까?
2) 새로 생성 된 '비트 맵'을 저장하는 동안 JPEG 파일에서 DPI를 다시 설정하려면 어떻게해야합니까?
다음은 참조 용 코드 부분입니다.
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;
내가 검색 한 결과 stackoverflow 및 다른 사이트에서 찾으려고했지만 적절한 관련 답변을 얻을 수 없습니다. 그래서 나는이 포럼에서 그것을 요구하기로 결정했다.
귀하의 힌트와 제안을 환영합니다.
산 제이.
GR8을, 내가 할 수있었습니다을 제 3 자 라이브러리 sanselanandroid를 사용하여 동일한 작업을 수행합니다. 그러나이 방법은 더 빠르고 더 빠릅니다. 이 방법은 Exif 정보의 데이터를 변경합니다. 이 방법을 사용하면 이미지에 축소판이없는 JPEG 'X 해상도'와 'Y 해상도'를 변경할 수 있습니다. Photos (엄지 손톱과 더 많은 exif 정보가있는 전문 카메라에서 찍은 사진)을 사용해 보았을 때 DPI를 Sanselan 방식으로 직접 설정할 수 없었습니다. – SHS