Convert all toList to asList

This commit is contained in:
oupson 2019-06-11 21:14:16 +02:00
parent 6c6545c0f8
commit e3f8614873
4 changed files with 103 additions and 110 deletions

View File

@ -56,20 +56,20 @@ class APNGDisassembler {
// We need a body var to know body length and generate crc // We need a body var to know body length and generate crc
val ihdrBody = ArrayList<Byte>() val ihdrBody = ArrayList<Byte>()
// Add chunk body length // Add chunk body length
ihdr.addAll(to4Bytes(ihdrOfApng.body.size).toList()) ihdr.addAll(to4Bytes(ihdrOfApng.body.size).asList())
// Add IHDR // Add IHDR
ihdrBody.addAll(byteArrayOf(0x49.toByte(), 0x48.toByte(), 0x44.toByte(), 0x52.toByte()).toList()) ihdrBody.addAll(byteArrayOf(0x49.toByte(), 0x48.toByte(), 0x44.toByte(), 0x52.toByte()).asList())
// Add the max width and height // Add the max width and height
ihdrBody.addAll(to4Bytes(width).toList()) ihdrBody.addAll(to4Bytes(width).asList())
ihdrBody.addAll(to4Bytes(height).toList()) ihdrBody.addAll(to4Bytes(height).asList())
// Add complicated stuff like depth color ... // Add complicated stuff like depth color ...
// If you want correct png you need same parameters. Good solution is to create new png. // If you want correct png you need same parameters. Good solution is to create new png.
ihdrBody.addAll(ihdrOfApng.body.copyOfRange(8, 13).toList()) ihdrBody.addAll(ihdrOfApng.body.copyOfRange(8, 13).asList())
// Generate CRC // Generate CRC
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(ihdrBody.toByteArray(), 0, ihdrBody.size) crC32.update(ihdrBody.toByteArray(), 0, ihdrBody.size)
ihdr.addAll(ihdrBody) ihdr.addAll(ihdrBody)
ihdr.addAll(to4Bytes(crC32.value.toInt()).toList()) ihdr.addAll(to4Bytes(crC32.value.toInt()).asList())
return ihdr.toByteArray() return ihdr.toByteArray()
} }
@ -83,14 +83,14 @@ class APNGDisassembler {
Utils.fcTL -> { Utils.fcTL -> {
if (png == null) { if (png == null) {
cover?.let { cover?.let {
it.addAll(to4Bytes(0).toList()) it.addAll(to4Bytes(0).asList())
// Add IEND // Add IEND
val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44) val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44)
// Generate crc for IEND // Generate crc for IEND
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(iend, 0, iend.size) crC32.update(iend, 0, iend.size)
it.addAll(iend.toList()) it.addAll(iend.asList())
it.addAll(to4Bytes(crC32.value.toInt()).toList()) it.addAll(to4Bytes(crC32.value.toInt()).asList())
apng.cover = BitmapFactory.decodeByteArray(it.toByteArray(), 0, it.size) apng.cover = BitmapFactory.decodeByteArray(it.toByteArray(), 0, it.size)
} }
png = ArrayList() png = ArrayList()
@ -110,24 +110,24 @@ class APNGDisassembler {
throw BadApng("`yOffset` + `height` must be <= `IHDR` height") throw BadApng("`yOffset` + `height` must be <= `IHDR` height")
} }
png?.addAll(pngSignature.toList()) png?.addAll(pngSignature.asList())
png?.addAll(generateIhdr(ihdr, width, height).toList()) png?.addAll(generateIhdr(ihdr, width, height).asList())
plte?.let { plte?.let {
png?.addAll(it.toList()) png?.addAll(it.asList())
} }
tnrs?.let { tnrs?.let {
png?.addAll(it.toList()) png?.addAll(it.asList())
} }
} else { } else {
// Add IEND body length : 0 // Add IEND body length : 0
png?.addAll(to4Bytes(0).toList()) png?.addAll(to4Bytes(0).asList())
// Add IEND // Add IEND
val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44) val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44)
// Generate crc for IEND // Generate crc for IEND
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(iend, 0, iend.size) crC32.update(iend, 0, iend.size)
png?.addAll(iend.toList()) png?.addAll(iend.asList())
png?.addAll(to4Bytes(crC32.value.toInt()).toList()) png?.addAll(to4Bytes(crC32.value.toInt()).asList())
apng.frames.add(Frame(png!!.toByteArray(), delay, xOffset, yOffset, blendOp, disposeOp, maxWidth, maxHeight)) apng.frames.add(Frame(png!!.toByteArray(), delay, xOffset, yOffset, blendOp, disposeOp, maxWidth, maxHeight))
png = ArrayList() png = ArrayList()
val fcTL = fcTL() val fcTL = fcTL()
@ -139,71 +139,71 @@ class APNGDisassembler {
disposeOp = fcTL.disposeOp disposeOp = fcTL.disposeOp
val width = fcTL.pngWidth val width = fcTL.pngWidth
val height = fcTL.pngHeight val height = fcTL.pngHeight
png?.addAll(pngSignature.toList()) png?.addAll(pngSignature.asList())
png?.addAll(generateIhdr(ihdr, width, height).toList()) png?.addAll(generateIhdr(ihdr, width, height).asList())
plte?.let { plte?.let {
png?.addAll(it.toList()) png?.addAll(it.asList())
} }
tnrs?.let { tnrs?.let {
png?.addAll(it.toList()) png?.addAll(it.asList())
} }
} }
} }
Utils.IEND -> { Utils.IEND -> {
png?.addAll(to4Bytes(0).toList()) png?.addAll(to4Bytes(0).asList())
// Add IEND // Add IEND
val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44) val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44)
// Generate crc for IEND // Generate crc for IEND
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(iend, 0, iend.size) crC32.update(iend, 0, iend.size)
png?.addAll(iend.toList()) png?.addAll(iend.asList())
png?.addAll(to4Bytes(crC32.value.toInt()).toList()) png?.addAll(to4Bytes(crC32.value.toInt()).asList())
apng.frames.add(Frame(png!!.toByteArray(), delay, xOffset, yOffset, blendOp, disposeOp, maxWidth, maxHeight)) apng.frames.add(Frame(png!!.toByteArray(), delay, xOffset, yOffset, blendOp, disposeOp, maxWidth, maxHeight))
} }
Utils.IDAT -> { Utils.IDAT -> {
if (png == null) { if (png == null) {
if (cover == null) { if (cover == null) {
cover = ArrayList() cover = ArrayList()
cover?.addAll(pngSignature.toList()) cover?.addAll(pngSignature.asList())
cover?.addAll(generateIhdr(ihdr, maxWidth, maxHeight).toList()) cover?.addAll(generateIhdr(ihdr, maxWidth, maxHeight).asList())
} }
// Find the chunk length // Find the chunk length
val bodySize = parseLength(byteArray.copyOfRange(i - 4, i)) val bodySize = parseLength(byteArray.copyOfRange(i - 4, i))
cover?.addAll(byteArray.copyOfRange(i - 4, i).toList()) cover?.addAll(byteArray.copyOfRange(i - 4, i).asList())
val body = ArrayList<Byte>() val body = ArrayList<Byte>()
body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).toList()) body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).asList())
// Get image bytes // Get image bytes
body.addAll(byteArray.copyOfRange(i + 4, i + 4 + bodySize).toList()) body.addAll(byteArray.copyOfRange(i + 4, i + 4 + bodySize).asList())
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(body.toByteArray(), 0, body.size) crC32.update(body.toByteArray(), 0, body.size)
cover?.addAll(body) cover?.addAll(body)
cover?.addAll(to4Bytes(crC32.value.toInt()).toList()) cover?.addAll(to4Bytes(crC32.value.toInt()).asList())
} else { } else {
// Find the chunk length // Find the chunk length
val bodySize = parseLength(byteArray.copyOfRange(i - 4, i)) val bodySize = parseLength(byteArray.copyOfRange(i - 4, i))
png?.addAll(byteArray.copyOfRange(i - 4, i).toList()) png?.addAll(byteArray.copyOfRange(i - 4, i).asList())
val body = ArrayList<Byte>() val body = ArrayList<Byte>()
body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).toList()) body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).asList())
// Get image bytes // Get image bytes
body.addAll(byteArray.copyOfRange(i + 4, i + 4 + bodySize).toList()) body.addAll(byteArray.copyOfRange(i + 4, i + 4 + bodySize).asList())
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(body.toByteArray(), 0, body.size) crC32.update(body.toByteArray(), 0, body.size)
png?.addAll(body) png?.addAll(body)
png?.addAll(to4Bytes(crC32.value.toInt()).toList()) png?.addAll(to4Bytes(crC32.value.toInt()).asList())
} }
} }
Utils.fdAT -> { Utils.fdAT -> {
// Find the chunk length // Find the chunk length
val bodySize = parseLength(byteArray.copyOfRange(i - 4, i)) val bodySize = parseLength(byteArray.copyOfRange(i - 4, i))
png?.addAll(to4Bytes(bodySize - 4).toList()) png?.addAll(to4Bytes(bodySize - 4).asList())
val body = ArrayList<Byte>() val body = ArrayList<Byte>()
body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).toList()) body.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).asList())
// Get image bytes // Get image bytes
body.addAll(byteArray.copyOfRange(i + 8, i + 4 + bodySize).toList()) body.addAll(byteArray.copyOfRange(i + 8, i + 4 + bodySize).asList())
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(body.toByteArray(), 0, body.size) crC32.update(body.toByteArray(), 0, body.size)
png?.addAll(body) png?.addAll(body)
png?.addAll(to4Bytes(crC32.value.toInt()).toList()) png?.addAll(to4Bytes(crC32.value.toInt()).asList())
} }
Utils.plte -> { Utils.plte -> {
plte = byteArray plte = byteArray

View File

@ -69,9 +69,9 @@ class Apng {
var seq = 0 var seq = 0
val res = ArrayList<Byte>() val res = ArrayList<Byte>()
// Add PNG signature // Add PNG signature
res.addAll(pngSignature.toList()) res.addAll(pngSignature.asList())
// Add Image Header // Add Image Header
res.addAll(generateIhdr().toList()) res.addAll(generateIhdr().asList())
// Add Animation Controller // Add Animation Controller
res.addAll(generateACTL()) res.addAll(generateACTL())
@ -87,28 +87,28 @@ class Apng {
val fcTL = ArrayList<Byte>() val fcTL = ArrayList<Byte>()
// Add the length of the chunk body // Add the length of the chunk body
framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).toList()) framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).asList())
// Add fcTL // Add fcTL
fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).toList()) fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).asList())
// Add the frame number // Add the frame number
fcTL.addAll(to4Bytes(seq).toList()) fcTL.addAll(to4Bytes(seq).asList())
// foreach fcTL or fdAT we must increment seq // foreach fcTL or fdAT we must increment seq
seq++ seq++
// Add width and height // Add width and height
fcTL.addAll(to4Bytes(frames[0].width).toList()) fcTL.addAll(to4Bytes(frames[0].width).asList())
fcTL.addAll(to4Bytes(frames[0].height).toList()) fcTL.addAll(to4Bytes(frames[0].height).asList())
// Add offsets // Add offsets
fcTL.addAll(to4Bytes(frames[0].xOffsets).toList()) fcTL.addAll(to4Bytes(frames[0].xOffsets).asList())
fcTL.addAll(to4Bytes(frames[0].yOffsets).toList()) fcTL.addAll(to4Bytes(frames[0].yOffsets).asList())
// Set frame delay // Set frame delay
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList()) fcTL.addAll(to2Bytes(frames[0].delay.toInt()).asList())
fcTL.addAll(to2Bytes(1000).toList()) fcTL.addAll(to2Bytes(1000).asList())
// Add DisposeOp and BlendOp // Add DisposeOp and BlendOp
fcTL.add(getDisposeOp(frames[0].disposeOp).toByte()) fcTL.add(getDisposeOp(frames[0].disposeOp).toByte())
@ -118,23 +118,23 @@ class Apng {
val crc = CRC32() val crc = CRC32()
crc.update(fcTL.toByteArray(), 0, fcTL.size) crc.update(fcTL.toByteArray(), 0, fcTL.size)
framesByte.addAll(fcTL) framesByte.addAll(fcTL)
framesByte.addAll(to4Bytes(crc.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc.value.toInt()).asList())
// endregion // endregion
// region idat // region idat
frames[0].idat.IDATBody.forEach { frames[0].idat.IDATBody.forEach {
val idat = ArrayList<Byte>() val idat = ArrayList<Byte>()
// Add the chunk body length // Add the chunk body length
framesByte.addAll(to4Bytes(it.size).toList()) framesByte.addAll(to4Bytes(it.size).asList())
// Add IDAT // Add IDAT
idat.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).toList()) idat.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).asList())
// Add chunk body // Add chunk body
idat.addAll(it.toList()) idat.addAll(it.asList())
// Generate CRC // Generate CRC
val crc1 = CRC32() val crc1 = CRC32()
crc1.update(idat.toByteArray(), 0, idat.size) crc1.update(idat.toByteArray(), 0, idat.size)
framesByte.addAll(idat) framesByte.addAll(idat)
framesByte.addAll(to4Bytes(crc1.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc1.value.toInt()).asList())
} }
// endregion // endregion
res.addAll(framesByte) res.addAll(framesByte)
@ -146,38 +146,38 @@ class Apng {
idat.parse(PngEncoder.encode(cover!!, true, 1)) idat.parse(PngEncoder.encode(cover!!, true, 1))
idat.IDATBody.forEach { idat.IDATBody.forEach {
val idatByteArray = ArrayList<Byte>() val idatByteArray = ArrayList<Byte>()
framesByte.addAll(to4Bytes(it.size).toList()) framesByte.addAll(to4Bytes(it.size).asList())
idatByteArray.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).toList()) idatByteArray.addAll(byteArrayOf(0x49, 0x44, 0x41, 0x54).asList())
idatByteArray.addAll(it.toList()) idatByteArray.addAll(it.asList())
val crc1 = CRC32() val crc1 = CRC32()
crc1.update(idatByteArray.toByteArray(), 0, idatByteArray.size) crc1.update(idatByteArray.toByteArray(), 0, idatByteArray.size)
framesByte.addAll(idatByteArray) framesByte.addAll(idatByteArray)
framesByte.addAll(to4Bytes(crc1.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc1.value.toInt()).asList())
} }
// endregion // endregion
//region fcTL //region fcTL
val fcTL = ArrayList<Byte>() val fcTL = ArrayList<Byte>()
// Add the length of the chunk body // Add the length of the chunk body
framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).toList()) framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).asList())
// Add fcTL // Add fcTL
fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).toList()) fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).asList())
// Add the frame number // Add the frame number
fcTL.addAll(to4Bytes(seq).toList()) fcTL.addAll(to4Bytes(seq).asList())
seq++ seq++
// Add width and height // Add width and height
fcTL.addAll(to4Bytes(frames[0].width).toList()) fcTL.addAll(to4Bytes(frames[0].width).asList())
fcTL.addAll(to4Bytes(frames[0].height).toList()) fcTL.addAll(to4Bytes(frames[0].height).asList())
fcTL.addAll(to4Bytes(frames[0].xOffsets).toList()) fcTL.addAll(to4Bytes(frames[0].xOffsets).asList())
fcTL.addAll(to4Bytes(frames[0].yOffsets).toList()) fcTL.addAll(to4Bytes(frames[0].yOffsets).asList())
// Set frame delay // Set frame delay
fcTL.addAll(to2Bytes(frames[0].delay.toInt()).toList()) fcTL.addAll(to2Bytes(frames[0].delay.toInt()).asList())
fcTL.addAll(to2Bytes(1000).toList()) fcTL.addAll(to2Bytes(1000).asList())
// Add DisposeOp and BlendOp // Add DisposeOp and BlendOp
fcTL.add(getDisposeOp(frames[0].disposeOp).toByte()) fcTL.add(getDisposeOp(frames[0].disposeOp).toByte())
@ -187,25 +187,25 @@ class Apng {
val crc = CRC32() val crc = CRC32()
crc.update(fcTL.toByteArray(), 0, fcTL.size) crc.update(fcTL.toByteArray(), 0, fcTL.size)
framesByte.addAll(fcTL) framesByte.addAll(fcTL)
framesByte.addAll(to4Bytes(crc.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc.value.toInt()).asList())
// endregion // endregion
// region fdat // region fdat
frames[0].idat.IDATBody.forEach { frames[0].idat.IDATBody.forEach {
val fdat = ArrayList<Byte>() val fdat = ArrayList<Byte>()
// Add the chunk body length // Add the chunk body length
framesByte.addAll(to4Bytes(it.size + 4).toList()) framesByte.addAll(to4Bytes(it.size + 4).asList())
// Add fdat // Add fdat
fdat.addAll(byteArrayOf(0x66, 0x64, 0x41, 0x54).toList()) fdat.addAll(byteArrayOf(0x66, 0x64, 0x41, 0x54).asList())
fdat.addAll(to4Bytes(seq).toList()) fdat.addAll(to4Bytes(seq).asList())
seq++ seq++
// Add chunk body // Add chunk body
fdat.addAll(it.toList()) fdat.addAll(it.asList())
// Generate CRC // Generate CRC
val crc1 = CRC32() val crc1 = CRC32()
crc1.update(fdat.toByteArray(), 0, fdat.size) crc1.update(fdat.toByteArray(), 0, fdat.size)
framesByte.addAll(fdat) framesByte.addAll(fdat)
framesByte.addAll(to4Bytes(crc1.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc1.value.toInt()).asList())
} }
// endregion // endregion
res.addAll(framesByte) res.addAll(framesByte)
@ -216,23 +216,23 @@ class Apng {
val framesByte = ArrayList<Byte>() val framesByte = ArrayList<Byte>()
val fcTL = ArrayList<Byte>() val fcTL = ArrayList<Byte>()
// region fcTL // region fcTL
framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).toList()) framesByte.addAll(byteArrayOf(0x00, 0x00, 0x00, 0x1A).asList())
fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).toList()) fcTL.addAll(byteArrayOf(0x66, 0x63, 0x54, 0x4c).asList())
// Frame number // Frame number
fcTL.addAll(to4Bytes(seq).toList()) fcTL.addAll(to4Bytes(seq).asList())
seq++ seq++
// width and height // width and height
fcTL.addAll(to4Bytes(frames[i].width).toList()) fcTL.addAll(to4Bytes(frames[i].width).asList())
fcTL.addAll(to4Bytes(frames[i].height).toList()) fcTL.addAll(to4Bytes(frames[i].height).asList())
fcTL.addAll(to4Bytes(frames[i].xOffsets).toList()) fcTL.addAll(to4Bytes(frames[i].xOffsets).asList())
fcTL.addAll(to4Bytes(frames[i].yOffsets).toList()) fcTL.addAll(to4Bytes(frames[i].yOffsets).asList())
// Set frame delay // Set frame delay
fcTL.addAll(to2Bytes(frames[i].delay.toInt()).toList()) fcTL.addAll(to2Bytes(frames[i].delay.toInt()).asList())
fcTL.addAll(to2Bytes(1000).toList()) fcTL.addAll(to2Bytes(1000).asList())
fcTL.add(getDisposeOp(frames[i].disposeOp).toByte()) fcTL.add(getDisposeOp(frames[i].disposeOp).toByte())
fcTL.add(getBlendOp(frames[i].blendOp).toByte()) fcTL.add(getBlendOp(frames[i].blendOp).toByte())
@ -240,7 +240,7 @@ class Apng {
val crc = CRC32() val crc = CRC32()
crc.update(fcTL.toByteArray(), 0, fcTL.size) crc.update(fcTL.toByteArray(), 0, fcTL.size)
framesByte.addAll(fcTL) framesByte.addAll(fcTL)
framesByte.addAll(to4Bytes(crc.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc.value.toInt()).asList())
// endregion // endregion
// region fdAT // region fdAT
@ -248,20 +248,20 @@ class Apng {
frames[i].idat.IDATBody.forEach { frames[i].idat.IDATBody.forEach {
val fdat = ArrayList<Byte>() val fdat = ArrayList<Byte>()
// Add IDAT size of frame + 4 byte of the seq // Add IDAT size of frame + 4 byte of the seq
framesByte.addAll(to4Bytes(it.size + 4).toList()) framesByte.addAll(to4Bytes(it.size + 4).asList())
// Add fdAT // Add fdAT
fdat.addAll(byteArrayOf(0x66, 0x64, 0x41, 0x54).toList()) fdat.addAll(byteArrayOf(0x66, 0x64, 0x41, 0x54).asList())
// Add Sequence number // Add Sequence number
// ! THIS IS NOT FRAME NUMBER // ! THIS IS NOT FRAME NUMBER
fdat.addAll(to4Bytes(seq).toList()) fdat.addAll(to4Bytes(seq).asList())
// Increase seq // Increase seq
seq++ seq++
fdat.addAll(it.toList()) fdat.addAll(it.asList())
// Generate CRC // Generate CRC
val crc1 = CRC32() val crc1 = CRC32()
crc1.update(fdat.toByteArray(), 0, fdat.size) crc1.update(fdat.toByteArray(), 0, fdat.size)
framesByte.addAll(fdat) framesByte.addAll(fdat)
framesByte.addAll(to4Bytes(crc1.value.toInt()).toList()) framesByte.addAll(to4Bytes(crc1.value.toInt()).asList())
} }
// endregion // endregion
res.addAll(framesByte) res.addAll(framesByte)
@ -269,14 +269,14 @@ class Apng {
if (frames.isNotEmpty()) { if (frames.isNotEmpty()) {
// Add IEND body length : 0 // Add IEND body length : 0
res.addAll(to4Bytes(0).toList()) res.addAll(to4Bytes(0).asList())
// Add IEND // Add IEND
val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44) val iend = byteArrayOf(0x49, 0x45, 0x4E, 0x44)
// Generate crc for IEND // Generate crc for IEND
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(iend, 0, iend.size) crC32.update(iend, 0, iend.size)
res.addAll(iend.toList()) res.addAll(iend.asList())
res.addAll(to4Bytes(crC32.value.toInt()).toList()) res.addAll(to4Bytes(crC32.value.toInt()).asList())
return res.toByteArray() return res.toByteArray()
} else { } else {
throw NoFrameException() throw NoFrameException()
@ -315,23 +315,23 @@ class Apng {
} }
// Add chunk body length // Add chunk body length
ihdr.addAll(to4Bytes(frames[0].ihdr.body.size).toList()) ihdr.addAll(to4Bytes(frames[0].ihdr.body.size).asList())
// Add IHDR // Add IHDR
ihdrBody.addAll(byteArrayOf(0x49.toByte(), 0x48.toByte(), 0x44.toByte(), 0x52.toByte()).toList()) ihdrBody.addAll(byteArrayOf(0x49.toByte(), 0x48.toByte(), 0x44.toByte(), 0x52.toByte()).asList())
// Add the max width and height // Add the max width and height
ihdrBody.addAll(to4Bytes(maxWidth!!).toList()) ihdrBody.addAll(to4Bytes(maxWidth!!).asList())
ihdrBody.addAll(to4Bytes(maxHeight!!).toList()) ihdrBody.addAll(to4Bytes(maxHeight!!).asList())
// Add complicated stuff like depth color ... // Add complicated stuff like depth color ...
// If you want correct png you need same parameters. Good solution is to create new png. // If you want correct png you need same parameters. Good solution is to create new png.
ihdrBody.addAll(frames[0].ihdr.body.copyOfRange(8, 13).toList()) ihdrBody.addAll(frames[0].ihdr.body.copyOfRange(8, 13).asList())
// Generate CRC // Generate CRC
val crC32 = CRC32() val crC32 = CRC32()
crC32.update(ihdrBody.toByteArray(), 0, ihdrBody.size) crC32.update(ihdrBody.toByteArray(), 0, ihdrBody.size)
ihdr.addAll(ihdrBody) ihdr.addAll(ihdrBody)
ihdr.addAll(to4Bytes(crC32.value.toInt()).toList()) ihdr.addAll(to4Bytes(crC32.value.toInt()).asList())
return ihdr.toByteArray() return ihdr.toByteArray()
} }
@ -344,22 +344,22 @@ class Apng {
val actl = ArrayList<Byte>() val actl = ArrayList<Byte>()
// Add length bytes // Add length bytes
res.addAll(to4Bytes(8).toList()) res.addAll(to4Bytes(8).asList())
// Add acTL // Add acTL
actl.addAll(byteArrayOf(0x61, 0x63, 0x54, 0x4c).toList()) actl.addAll(byteArrayOf(0x61, 0x63, 0x54, 0x4c).asList())
// Add number of frames // Add number of frames
actl.addAll(to4Bytes(frames.size).toList()) actl.addAll(to4Bytes(frames.size).asList())
// Number of repeat, 0 to infinite // Number of repeat, 0 to infinite
actl.addAll(to4Bytes(0).toList()) actl.addAll(to4Bytes(0).asList())
res.addAll(actl) res.addAll(actl)
// generate crc // generate crc
val crc = CRC32() val crc = CRC32()
crc.update(actl.toByteArray(), 0, actl.size) crc.update(actl.toByteArray(), 0, actl.size)
res.addAll(to4Bytes(crc.value.toInt()).toList()) res.addAll(to4Bytes(crc.value.toInt()).asList())
return res return res
} }

View File

@ -120,12 +120,7 @@ class Utils {
* @return 2 Bytes * @return 2 Bytes
*/ */
fun to4Bytes(i: Int): ByteArray { fun to4Bytes(i: Int): ByteArray {
val result = ByteArray(4) return byteArrayOf((i shr 24).toByte(), (i shr 16).toByte(), (i shr 8).toByte(), i.toByte())
result[0] = (i shr 24).toByte()
result[1] = (i shr 16).toByte()
result[2] = (i shr 8).toByte()
result[3] = i /*>> 0*/.toByte()
return result
} }
/** /**

View File

@ -22,9 +22,7 @@ class Main2Activity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
verticalLayout { verticalLayout {
imageView = imageView { imageView = imageView().lparams {
}.lparams {
width = matchParent width = matchParent
height = matchParent height = matchParent
} }