png 图片数据读取问题

uuq 2011-09-13 12:27:27
我成功解压png数据出来了
但是fireworks生成的数据不是按RGB方式存放比如我生成几个像素的png24位图
我解压出来的真彩RGB数据
00 333333 CC33FF 194AB6
00 CC33FF 194AB6 333333
00 194AB6 333333 CC33FF
00 CC33FF 194AB6 333333
上面是正常的下面这一行就有问题
02 670034 000000 9900CC

最前边应该是00的但是有时候是01 有时候是 03 有时候是04
670034 000000 9900CC
根本是我设置三个像素颜色。
今天弄了一天不明白是什么意思
01 好像是重复第一个像素颜色
04 好像是重复第一行颜色
02 好像也是重复上一行颜色

请问前边01 02 03 04表示什么意思
...全文
334 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fandh 2011-09-15
  • 打赏
  • 举报
回复
恭喜!呵呵
uuq 2011-09-15
  • 打赏
  • 举报
回复
搞定了

State Name Predicted value
0 None Zero (so that the raw value passes through unaltered)
1 Sub Value of a (to the left)
2 Up Value of b (above)
3 Average Mean of bytes a and b, rounded down
4 Paeth a, b, or c, whichever is closest to p = a + b − c
Table 1. Predictor states used for differential encoding in the PNG image format.
The Paeth filter computes a simple linear function of the three neighboring pixels (a, b, c), then
chooses as predictor the neighboring pixel closest to the computed value as defined by the
following pseudo-code:
// Input: color values a,b, and c as illustrated in Figure 3
// a = left, b = above, c = upper left
// Output: a paeth-prediction for a,b, and c
paeth_predict(a,b,c)
p := a+b-c
pa := abs(p-a)
pb := abs(p-b)
pc := abs(p-c)
IF (pa<=pb AND pa<=pc) p := a
ELSE IF (pb <= pc) p := b
ELSE p := c
paeth_predict := p
Compression of a pixel value x dependent on its neighbors a,b, and c works by calculating
compressed(x) = x - paeth_predict(a,b,c)
and decompression works by reversing the formula to
uncompressed(x) = compressed(x) + paeth_predict(a,b,c).
uuq 2011-09-13
  • 打赏
  • 举报
回复
我是一层的,如果调色板的没有问题 只是真彩RGB或真彩+apha RGBA 就有问题
就是原来应该是 00的 不知fireworks怎么加多加了一些01 02 03 04这种样子

http://tieba.baidu.com/f?kz=859640399
这位老兄跟我遇到问题是一样的

PNG-8 3X3 带ALPHA通道的的PNG图片解压IDAT后 获得 3x3x4+3=39BITS (宽x高x4+高)

每一行的开头都会多出一个BITS 例如

0x00 0x50 0x50 0x35 0xFF 0x50 0x60 0xAC 0xFF 0x00 0x00 0x00 0xFF
0x01 0x50 0x50 0x33 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x04 0x00 0x00 0x00 0x01 0x00 0x01 0x02 0x02 0x00 0x00 0x00 0x00

运算后结果
0x50 0x50 0x35 0xFF 0x50 0x60 0xAC 0xFF 0x00 0x00 0x00 0xFF
0x50 0x50 0x33 0x00 0x50 0x50 0x33 0x00 0x50 0x50 0x33 0x00
0x50 0x50 0x33 0x01 0x50 0x51 0x35 0x03 0x50 0x51 0x35 0x03

0x00 表示本行不作任何运算
0x01 表示本行4位逐位作AND运算
0x04 表示本行第一个4位于上一行第一个4位 逐位作AND运算 本行后面的位于 上一个4位作AND运算
对于有的颜色较少的图片运算过后很正确
对于有的颜色较多的图片速算总是错误。。。

有没有对 PNG结构了解的人 在线等啊
辰岡墨竹 2011-09-13
  • 打赏
  • 举报
回复
注意Fireworks生成的PNG一般是可以有多个图层的。而且别忘了Alpha通道。
贝隆 2011-09-13
  • 打赏
  • 举报
回复
学习,学习。。
fandh 2011-09-13
  • 打赏
  • 举报
回复
http://blog.csdn.net/bisword/article/details/2777121
看看格式详解吧
uuq 2011-09-13
  • 打赏
  • 举报
回复
01 为前后两个字节相加
02 为上下两个字节相加

目前知道这么多

19,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧