小编ANo*_*tly的帖子

伪代码:如何从位和字节解码PNG文件?

我一直试图通过逆向工程我在GIMP中创建的.png文件来解决这个问题.它是4x4像素.我的目标是将原始像素解码出文件,目的是将其反转以进行编码.

这是文件的完整十六进制转储:

89504E47 0D0A1A0A 0000000D 49484452 00000004 00000004  
08020000 00269309 29000000 3F494441 54081D01 3400CBFF  
01CC96B1 134FE120 C0CECDF1 5101FFA5 60000000 000000E0  
403201DF E59286DF 6D000000 00000004 EDB11F00 2E007A21  
93EDB11F 3063136F 4733525A 00000000 49454E44 AE426082  
Run Code Online (Sandbox Code Playgroud)

根据规范,我们从PNG签名开始,这是前8个字节.

89504E47 0D0A1A0A

然后我们重复"块"结构,这个文件有3个"块",标题(IHDR),图像数据(IDAT),然后是结束"块"(IEND).

每个块被安排成:块数据长度的前4个字节,数据类型的接下来的4个字节,然后是实际数据的n个字节,然后是4个字节用于循环冗余校验(CRC)数据类型和实际数据部分.

通过......

0000000D

是块的数据长度(13个字节).

49484452

是块的类型(IHDR).

00000004 00000004 08020000 00

是块的数据(4字节宽度,高度; 1字节位深度,颜色类型,压缩方法,滤波方法,隔行扫描方法).

269309 29

是数据和类型的CRC(设法让代码从这里开始工作.

000000 3F

是下一个块的数据长度(63个字节).

494441 54

是块的类型(IDAT).

081D01 3400CBFF 01CC96B1 134FE120 C0CECDF1 5101FFA5 60000000 000000E0 403201DF E59286DF 6D000000 00000004 EDB11F00 2E007A21 93EDB11F 3063136F

是块的实际数据(压缩和过滤的图像数据).

所以我的实际问题是如何将最后一部分解码为原始像素?

根据 …

algorithm png image bitmap pseudocode

11
推荐指数
1
解决办法
694
查看次数

Swift 4:将 Bool 选项打印为未包装的 true 或 false 或包装的 nil?

基本上我想将以下值打印为“true”、“false”或“nil”。如果我尝试仅使用包装的值,我会得到我想要的“nil”,但会获得不需要的“Optional(true)”或“Optional(false)。如果我强制解开该值并且值为 nil,则会出现致命错误。我尝试了下面的代码,因为我已经看到它适用于字符串,但是因为“nil”不是 Bool 类型,所以它不被接受。有什么解决方案吗?

var isReal: Bool?
String("Value is \(isReal ?? "nil")")
Run Code Online (Sandbox Code Playgroud)

我正在导出到 csv 文件,了解此值是真还是假或尚未检查很有用。

boolean optional swift swift4

0
推荐指数
1
解决办法
952
查看次数

标签 统计

algorithm ×1

bitmap ×1

boolean ×1

image ×1

optional ×1

png ×1

pseudocode ×1

swift ×1

swift4 ×1