diff --git a/apng_library/src/main/java/oupson/apng/ImageUtils/PnnQuantizer.java b/apng_library/src/main/java/oupson/apng/ImageUtils/PnnQuantizer.java index 5aff13e..1cea98c 100644 --- a/apng_library/src/main/java/oupson/apng/ImageUtils/PnnQuantizer.java +++ b/apng_library/src/main/java/oupson/apng/ImageUtils/PnnQuantizer.java @@ -9,9 +9,10 @@ Copyright (c) 2018 Miller Cy Chan https://github.com/mcychan/nQuant.android/blob/master/nQuant.master/src/main/java/com/android/nQuant/PnnQuantizer.java */ -import android.graphics.Color; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; + import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; diff --git a/apng_library/src/main/java/oupson/apng/Utils.kt b/apng_library/src/main/java/oupson/apng/Utils.kt index 2ddb438..ccf71b6 100644 --- a/apng_library/src/main/java/oupson/apng/Utils.kt +++ b/apng_library/src/main/java/oupson/apng/Utils.kt @@ -18,13 +18,17 @@ class Utils { * @return True if is an APNG */ fun isApng(byteArray: ByteArray) : Boolean { + if (!isPng(byteArray)) return false try { - val acTL = byteArrayOf(0x66, 0x63, 0x54, 0x4c) - loop@ for (i in 0 until byteArray.size) { + val acTL = byteArrayOf(0x61, 0x63, 0x54, 0x4c) + val IDAT = byteArrayOf(0x49, 0x44, 0x41, 0x54) + for (i in 0 until byteArray.size) { val it = byteArray.copyOfRange(i, i + 4) // if byteArray contain acTL if (it.contentEquals(acTL)) { return true + } else if (it.contentEquals(IDAT)){ + return false } } return false diff --git a/app-test/src/main/java/oupson/apngcreator/Main2Activity.kt b/app-test/src/main/java/oupson/apngcreator/Main2Activity.kt index 48ba203..048c9be 100644 --- a/app-test/src/main/java/oupson/apngcreator/Main2Activity.kt +++ b/app-test/src/main/java/oupson/apngcreator/Main2Activity.kt @@ -62,7 +62,13 @@ class Main2Activity : AppCompatActivity() { } } else { try { - animator.load(getImageRealPath(contentResolver, uri, null)) + val bytes = contentResolver.openInputStream(uri).readBytes() + if (isApng(bytes)) { + animator.load(bytes) + } else { + imageView3.setImageBitmap(BitmapFactory.decodeFile(getImageRealPath(contentResolver, uri, null))) + Snackbar.make(constraint, "Not an APNG", Snackbar.LENGTH_LONG).show() + } } catch (e: NotApngException) { imageView3.setImageBitmap(BitmapFactory.decodeFile(getImageRealPath(contentResolver, uri, null))) Snackbar.make(constraint, "Not an APNG", Snackbar.LENGTH_LONG).show() diff --git a/app-test/src/main/java/oupson/apngcreator/MainActivity.kt b/app-test/src/main/java/oupson/apngcreator/MainActivity.kt index 268d522..cbc1077 100644 --- a/app-test/src/main/java/oupson/apngcreator/MainActivity.kt +++ b/app-test/src/main/java/oupson/apngcreator/MainActivity.kt @@ -29,7 +29,7 @@ class MainActivity : AppCompatActivity() { load(imageUrl) onLoaded { setOnAnimationLoopListener { - Log.e("app-test", "onLoop") + // Log.e("app-test", "onLoop") } } }