2

たぶん、他の誰かがこの問題に直面したかもしれません: タイトルが示すように、スクリーンショットをデバイスからサーバーにアップロードすると、画質の低下が非常に大きくなります。次のリンクで一例を見ることができます http://cdn.voicebo.com/7507-05e6a7b3bf91d96b2d08da649c2ef590.jpg

このスクリーンショットは Nexus 4 で撮影されたものですが、Galaxy S2、S3、および Note 2 でも同じことが起こります。残念ながら、現在これをテストする携帯電話はこれ以上ありませんが、次のモデルの人気を考慮すると、これは多数のユーザーに影響を与えます.

これが発生する可能性のある回答または理由をかなりの時間検索したところ、実際には探していたものではありませんが、いくつかの情報が含まれている次のリンクが見つかりました http://www.google.rs/url?sa=t&rct=j&q =&esrc=s&source=web&cd=1&cad=rja&ved=0CCYQFjAA&url=http%3A%2F%2Fandroidforums.com%2Fsamsung-galaxy-s3%2F580114-screenshot-glitch.html&ei=1dKdUbPNA8nBO7G9gPgE&usg=AFQjCNECq7UNMp16pU8WLMl2VZ

また、カメラからの画像は jpeg であるのに対し、スクリーンショット画像は png ファイルとして保存されるという結論に達しました (これはすべての ROM で同じですが、間違っている可能性があります)。これも問題である可能性があります。サポートされている形式から画像ファイルを読み取ると、その画像のデータの生のバイトを取得するため、生のバイトの場合、入力形式は出力圧縮で役割を果たすべきではないため、これが問題になる理由はわかりません。エラーなしで読み取られました。
画像圧縮のコードの関連部分はこれだけですが、さらに情報が必要な場合は、さらに追加できます。

bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos);

私が尋ねている質問は次のとおりです: 他の誰かがこの問題に直面したことがありますか? また、どのように解決しましたか? 適切なファイルサイズで最良の結果を得るには、png画像を(どの設定を使用して)どのように圧縮すればよいですか?

ボーナス:現在、画像のファイル形式を検出する方法を試していますが、誰かがこれを使用して同様の問題を解決した場合は、そのことも回答に記載してください. 編集:ギャラリーから画像の画像形式を取得する方法は、画像の形式を取得するために現在使用している部分ですが、実際には質問に答えません。有益な議論をしてくれたすべての人に感謝します。

4

1 に答える 1

2

設定について言及しましたoptions.inSampleSizeが、問題がこれによって引き起こされる可能性が非常に高いようです:設定options.inSampleSize = 4は、エンコーダーにピクセルを捨てるように指示します(明らかに文字通り;適切なリサンプリングはあなたの例よりも良く見えるでしょう)、これはまさにあなたが見ているものです.

サイズを縮小する必要があるものと縮小すべきでないものについていくつかの決定を下す必要があります-コメントで、この設定は入力境界によって決定する必要があると言っているので、すでにこれを行っているようで、おそらくデバッグが必要なようですそこの。

スクリーンショットに写真コンテンツが含まれることが多い場合を除き、PNG を JPEG に変更することは最善の選択肢ではない可能性があることを繰り返します。ご存知かもしれませんが、PNG は写真コンテンツの圧縮が非常に苦手ですが、逆に、JPEG は、コンピューターやデバイスの画面で一般的に見られる種類の画像の品質を維持するのが非常に苦手です。このような状況では、PNG は許容される JPEG 画像よりも小さなファイルを生成することがよくあります。

于 2013-05-23T12:38:30.347 に答える