2

この質問を読んでくれてありがとう。このサイトの専門家は、私が必要とする支援を提供できると確信しています。

ユーザーがAndroid携帯で写真のexif情報を編集できるアプリを作成しようとしています。

ユーザー エクスペリエンスの向上の一環として、可能な限りデータ検証を適用したいと考えています。

Exif タグの場合 - TAG_GPS_PROCESSING_METHOD 検証を正しく適用できません。

これが私が適用したコードの一部です:

String strGPSProc = etGPSProc.getText().toString();

if(strGPSProc.equalsIgnoreCase("GPS") || strGPSProc.equalsIgnoreCase("CELLID") || strGPSProc.equalsIgnoreCase("WLAN") || strGPSProc.equalsIgnoreCase("MANUAL") ) {
        returnValue = true;
}else {
        returnValue=false;
        showToast("Incorrect value for GPS Processing Method. Correct value options are GPS, CELLID, WLAN or MANUAL.");
        etGPSProc.requestFocus();
}

このコードは、GPSProcessingMethod 用の EditText に入力された値が、EXIF のドキュメントに記載されている 4 つの所定の値のいずれかであるかどうかを確認します。

しかし、setAttribute() および saveAttributes() 関数を使用してこれを保存しようとすると、logcat にキャッチできない例外が表示されます。

Unsupported encoding for GPSProcessingMethod

GPSProcessingMethod の値をいくつかのヘッダー情報と共に保存する必要があることを Exif ドキュメントから理解しています。

他の 3rd パート クラスを使用せずに、これを正しく実装する方法について、専門家のアドバイスが必要です。

4

1 に答える 1

1

Exif仕様によると:

GPSProcessingメソッド

位置検索に使用されたメソッドの名前を記録する文字列。1バイト目は使用する文字コード(表6、表7)を表し、その後にメソッド名が続きます。Type は ASCII ではないため、NULL 終端は必要ありません

実際、表 6 は文字コードを 8 バイト シーケンスとしてリストしているため、上記はおそらく「最初のバイトが示すのは...」と読むべきです。とにかく、ASCII の文字コード指定は として定義され41.H, 53.H, 43.H, 49.H, 49.H, 00.H, 00.H, 00.H.、Unicode は (当然のことながら)55.H, 4E.H, 49.H, 43.H, 4F.H, 44.H, 45.H, 00.Hです。私はこれらがあなたが必要とするすべてであるべきだと思います。

それが役立つことを願っています。

編集:文字列値のみをサポートしていることを発見しましたExifInterface.setAttribute()...文字列の先頭で値をエンコードしてみることができますが、それがうまくいくとは思えません。エンコードはsetAttribute()orsaveAttributes()メソッドで処理する必要があるようです。APIのバグでしょうか?ソースコードを見てみましたが、値の実際の書き込みはネイティブ コードで行われるため、それ以上掘り下げるのはやめました。

于 2013-08-23T11:22:03.927 に答える