2017-10-19 4 views
0

元のビットマップからネイティブのクローンビットマップを作成します。 とAPI android.graphics.Bitmap.sameAs()ことで、Java層に2ビットマップを比較してみてください、それはアンドロイドOを返しますが、他のAndroidバージョンでを返します。 加えて、私はまた、などアンドロイドOでAndroidのビットマップのAPIによって設定、寸法、画素データを比較してみてください。また、だから、私は考えているアンドロイドO. にtrueを返す)android.graphics.Bitmap.same with android O比較したときにtrueを返さない2つのビットマップ同じ設定、寸法、ピクセルデータ

private boolean compareBitmap(Bitmap bitmap1, Bitmap bitmap2) 
{ 
    // Different types of image 
    if (bitmap1.getConfig() != bitmap2.getConfig()) 
     return false; 

    // Different sizes 
    if (bitmap1.getWidth() != bitmap2.getWidth()) 
     return false; 

    if (bitmap1.getHeight() != bitmap2.getHeight()) 
     return false; 

    int w = bitmap1.getWidth(); 
    int h = bitmap1.getHeight(); 

    int[] argbA = new int[w * h]; 
    int[] argbB = new int[w * h]; 

    bitmap1.getPixels(argbA, 0, w, 0, 0, w, h); 
    bitmap2.getPixels(argbB, 0, w, 0, 0, w, h); 

    // Alpha channel special check 
    if (bitmap1.getConfig() == Bitmap.Config.ALPHA_8) 
    { 
     final int length = w * h; 
     for (int i = 0; i < length; i++) 
     { 
      if ((argbA[i] & 0xFF000000) != (argbB[i] & 0xFF000000)) 
      { 
       return false; 
      } 
     } 
     return true; 
    } 

    return Arrays.equals(argbA, argbB); 
} 

方法compareBitmap(なぜandroid.graphics.Bitmap.sameAs()がこの場合、2ビットマップが同じ設定、寸法、ピクセルデータを持つ場合にfalseを返しますか?

答えて

0

渡されたビットマップがnullでないかどうかを再確認します。 nullの場合、falseが返されます。それ以外の場合は、返す理由がわかりません

+0

compareBitmap()を使用する前に、bitmapがnullでないことを確認します。ご存じのように、bitmap.sameAs()はAndroid OではFALSEを返しますが、古いAndroidバージョンではTRUEを返します – Eric

関連する問題