Really fix isApng function
This commit is contained in:
parent
a9d61f90ba
commit
ec67f6e09f
|
@ -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
|
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.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Color;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -18,13 +18,17 @@ class Utils {
|
||||||
* @return True if is an APNG
|
* @return True if is an APNG
|
||||||
*/
|
*/
|
||||||
fun isApng(byteArray: ByteArray) : Boolean {
|
fun isApng(byteArray: ByteArray) : Boolean {
|
||||||
|
if (!isPng(byteArray)) return false
|
||||||
try {
|
try {
|
||||||
val acTL = byteArrayOf(0x66, 0x63, 0x54, 0x4c)
|
val acTL = byteArrayOf(0x61, 0x63, 0x54, 0x4c)
|
||||||
loop@ for (i in 0 until byteArray.size) {
|
val IDAT = byteArrayOf(0x49, 0x44, 0x41, 0x54)
|
||||||
|
for (i in 0 until byteArray.size) {
|
||||||
val it = byteArray.copyOfRange(i, i + 4)
|
val it = byteArray.copyOfRange(i, i + 4)
|
||||||
// if byteArray contain acTL
|
// if byteArray contain acTL
|
||||||
if (it.contentEquals(acTL)) {
|
if (it.contentEquals(acTL)) {
|
||||||
return true
|
return true
|
||||||
|
} else if (it.contentEquals(IDAT)){
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -62,7 +62,13 @@ class Main2Activity : AppCompatActivity() {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
try {
|
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) {
|
} catch (e: NotApngException) {
|
||||||
imageView3.setImageBitmap(BitmapFactory.decodeFile(getImageRealPath(contentResolver, uri, null)))
|
imageView3.setImageBitmap(BitmapFactory.decodeFile(getImageRealPath(contentResolver, uri, null)))
|
||||||
Snackbar.make(constraint, "Not an APNG", Snackbar.LENGTH_LONG).show()
|
Snackbar.make(constraint, "Not an APNG", Snackbar.LENGTH_LONG).show()
|
||||||
|
|
|
@ -29,7 +29,7 @@ class MainActivity : AppCompatActivity() {
|
||||||
load(imageUrl)
|
load(imageUrl)
|
||||||
onLoaded {
|
onLoaded {
|
||||||
setOnAnimationLoopListener {
|
setOnAnimationLoopListener {
|
||||||
Log.e("app-test", "onLoop")
|
// Log.e("app-test", "onLoop")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue