2017-01-28 4 views
1

Androidの192x192ic_launcher.pngmipmap-xxxhdpiバージョン)のバイトを読み込もうとしています。PNGバイトが異なるのはなぜですか?

Drawable drawable = ResourcesCompat.getDrawableForDensity 
      (getResources(), R.mipmap.ic_launcher, 640, getTheme()); 

Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 

ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 

byte[] pngBytes = stream.toByteArray(); 

Log.d("TEST", "" + pngBytes[37]); 

私は、ファイルapp\src\main\res\mipmap-xxxhdpi\ic_launcher.pngに六角-エディタを使用して結果を比較しています:ここで

は私がやっているものです。

何らかの理由により、pngBytes[37]のバイトは、の異なるです。前のバイトは同じです。

何が原因でしょうか?

答えて

0

何らかの理由で、pngBytes [37]のバイトが実際のバイトと異なっています。

ほとんどの場合、かなりの違いがあります。そこにすることができて、あなたがして始めたものよりも、同一のPNGファイルを与えるためにcompress()のための要件は、ありません:

  • 異なる圧縮レベル
  • 異なるカラーパレット(例えば、プロセスを構築pngquantスタイルの技術を適用される場合がありますシンプルARGB対インデックスさ
  • 異なるピクセルフォーマット()
  • ので
+0

おかげで)あなたのリソースへ。実際のバイトはどのように取得できますか? –

+0

@UFCInsider:PNGを 'res/raw /'に移動し、 'リソース'オブジェクトに対して 'openRawResource()'を使います。あるいは、PNGを 'assets /'に移動し、 'AssetManager'で' open() 'を使います。どちらも、生のリソースまたはアセットに 'InputStream'を渡します。これらのファイルは、ビルドプロセスの一部として変更するべきではありません。 – CommonsWare

+0

プログラムで実際のバイトを取得する方法はありますか?私はPNGを移動したくありません。 –

関連する問題