2011-01-04 5 views
5

を失う:、私はそうのようなプライベートディレクトリにイメージをコピーしていExifデータ

FileChannel source = null; 
FileChannel destination = null; 
source = new FileInputStream(sourceFile).getChannel(); 
destination = new FileOutputStream(destFile).getChannel(); 
destination.transferFrom(source, 0, source.size()); 
source.close(); 
destination.close(); 

私はギャラリーに戻るに挿入..but、そのまま、後で:

private void moveImageToGallery(Uri inUri) throws Exception { 
    MediaStore.Images.Media.insertImage(getContentResolver(), ImageUtil.loadFullBitmap(inUri.getPath()), null, null); 
} 

..明らかにExifデータが失われます。回転はもはや機能しません。画像ファイルをコピーしてそのデータを失うことができない方法はありますか?ご意見ありがとうございます。

+0

を、1 devが「有効な機能要求のように思える」と述べました。 –

+1

それは良い方法がないということは難しいです。ファイルをコピーしてから挿入する前に、ExifInterfaceを使用して、回転、緯度/経度、撮影日などのイメージデータベースから読み取ることができる属性を追加します。次に、イメージを挿入すると、イメージを正しく読み込んで新しいデータベースエントリに追加する必要があります。うわー、これは2歳だと分かった!私はあなたがすでにこのようなことをしていると確信していますが、ここで私の答えを残します。なぜこれがAndroidの質問リストの一番上にあるのか分かりません。 –

答えて

2

FileChannelは実際にはデータを読み取ってデコードし、再エンコードしてから書き込んだようです。 EXIFデータが失われます。ファイルを(バイト単位で)コピーしても内容は変更されません。コピーの前後に起こることができるのはファイルアクセスの変更だけです(AndroidはLinuxに基づいており、LinuxはUNIX => rwx権限(chmod参照))、最終的にファイルの読み書きを拒否します。したがって、FileChannelが望ましくないことを行うことは明らかです。

このコードは、作業を行います:GoogleのAndroidグループは、これはOSの問題であると信じて私をリードしてPurusing

InputStream in = new FileInputStream(source); 
OutputStream out = new FileOutputStream(dest); 
byte[] buf = new byte[1024]; int len; 
while ((len = in.read(buf)) > 0) 
    out.write(buf, 0, len); 
in.close(); 
out.close(); 
+0

私はそれを試してみましょう。ギャラリーから写真を操作するときに、Androidの「チャンネル」を通過しなければならないと仮定しましたが、そうでないように見えます。 –

関連する問題