Move Companion object of APNGFactory to Utils

This commit is contained in:
oupson 2018-10-31 12:31:09 +01:00
parent 524df30d92
commit da8753e2c5
8 changed files with 31 additions and 27 deletions

View File

@ -7,7 +7,7 @@ android {
minSdkVersion 21
targetSdkVersion 26
versionCode 1
versionName "1.0.1"
versionName "1.0.2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

View File

@ -3,7 +3,8 @@ package oupson.apng
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import oupson.apng.ApngFactory.Companion.pngSignature
import oupson.apng.Utils.Companion.isApng
import oupson.apng.Utils.Companion.pngSignature
import oupson.apng.Utils.Companion.to4Bytes
import oupson.apng.chunks.IHDR
import oupson.apng.chunks.fcTL
@ -25,7 +26,7 @@ class APNGDisassembler(val byteArray: ByteArray) {
var dispose_op : Utils.Companion.dispose_op= Utils.Companion.dispose_op.APNG_DISPOSE_OP_NONE
init {
if (ApngFactory.isApng(byteArray)) {
if (isApng(byteArray)) {
val ihdr = IHDR()
ihdr.parseIHDR(byteArray)
maxWidth = ihdr.pngWidth

View File

@ -5,6 +5,7 @@ import android.graphics.BitmapFactory
import oupson.apng.Utils.Companion.convertImage
import oupson.apng.Utils.Companion.getBlend_op
import oupson.apng.Utils.Companion.getDispose_op
import oupson.apng.Utils.Companion.pngSignature
import oupson.apng.Utils.Companion.to2Bytes
import oupson.apng.Utils.Companion.to4Bytes
import oupson.apng.Utils.Companion.toByteArray
@ -130,7 +131,7 @@ class Apng {
var seq = 0
val res = ArrayList<Byte>()
// Add PNG signature
res.addAll(ApngFactory.pngSignature.toList())
res.addAll(pngSignature.toList())
// Add Image Header
res.addAll(generateIhdr().toList())

View File

@ -1,5 +1,6 @@
package oupson.apng
import oupson.apng.Utils.Companion.pngSignature
import oupson.apng.exceptions.NoFrameException
import java.util.zip.CRC32
@ -241,27 +242,6 @@ class ApngFactory {
return result
}
companion object {
// Return true if png
fun isPng(byteArray: ByteArray): Boolean {
return byteArray.copyOfRange(0, 8).contentToString() == pngSignature.contentToString()
}
fun isApng(byteArray: ByteArray): Boolean {
for (i in 0 until byteArray.size) {
// if byteArray contain acTL
if (byteArray[i] == 0x66.toByte() && byteArray[i + 1] == 0x63.toByte() && byteArray[i + 2] == 0x54.toByte() && byteArray[i + 3] == 0x4c.toByte()) {
// It's an apng
return true
}
}
// Else it's not an apng
return false
}
// Signature for png
val pngSignature: ByteArray = byteArrayOf(0x89.toByte(), 0x50.toByte(), 0x4E.toByte(), 0x47.toByte(), 0x0D.toByte(), 0x0A.toByte(), 0x1A.toByte(), 0x0A.toByte())
}
/**
* Add a frame to the Animated PNG

View File

@ -1,6 +1,6 @@
package oupson.apng
import oupson.apng.ApngFactory.Companion.isPng
import oupson.apng.Utils.Companion.isPng
import oupson.apng.chunks.IDAT
import oupson.apng.chunks.IHDR
import oupson.apng.exceptions.NotPngException

View File

@ -6,6 +6,21 @@ import java.io.ByteArrayOutputStream
class Utils {
companion object {
// Return true if png
fun isPng(byteArray: ByteArray): Boolean {
return byteArray.copyOfRange(0, 8).contentToString() == pngSignature.contentToString()
}
fun isApng(byteArray: ByteArray): Boolean {
// if byteArray contain acTL
return byteArray.toList().containsAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).toList())
}
// Signature for png
val pngSignature: ByteArray = byteArrayOf(0x89.toByte(), 0x50.toByte(), 0x4E.toByte(), 0x47.toByte(), 0x0D.toByte(), 0x0A.toByte(), 0x1A.toByte(), 0x0A.toByte())
enum class dispose_op {
APNG_DISPOSE_OP_NONE,
APNG_DISPOSE_OP_BACKGROUND,

View File

@ -15,7 +15,9 @@ import android.view.View
import kotlinx.android.synthetic.main.activity_main2.*
import org.jetbrains.anko.sdk27.coroutines.onClick
import oupson.apng.ApngAnimator
import oupson.apng.Utils.Companion.isApng
import oupson.apng.exceptions.NotApngException
import java.io.File
class Main2Activity : AppCompatActivity() {
@ -48,7 +50,12 @@ class Main2Activity : AppCompatActivity() {
val uri = intent.data
if (uri.toString().contains("file:///")) {
try {
animator.load(uri.path)
if (isApng(File(uri.path).readBytes())) {
animator.load(uri.path)
} else {
imageView3.setImageBitmap(BitmapFactory.decodeFile(uri.path))
Snackbar.make(constraint, "Not an APNG, and verified !", Snackbar.LENGTH_LONG).show()
}
} catch (e : NotApngException) {
imageView3.setImageBitmap(BitmapFactory.decodeFile(uri.path))
Snackbar.make(constraint, "Not an APNG", Snackbar.LENGTH_LONG).show()