最初32位的时候我是扫点的,然后"插0",但是出现移位和颜色值错误...(加上倒置)
24位好像是没有了 a 通道。
但是png是图片的每一行"插0",并不是每个颜色值。
bmp貌似是Window的位图档案。
不解柳之一用的RtlMoveMemory,虽然我知道这是将内存移来移去= =,
也知道object_id * 2就是内存位置的起始点(?),"p"所依靠的 Object#inspect 输出:
<ClassName 0x?????> # 0x????? 正是Object#object_id * 2
所以这个和内存位置有关,但是为啥+16后函数+8函数+16函数呢?(fux2来看了...)
好像在哪里说过实际的内存地址编号是左右调转的...(其实和上面的没什么关系)
但为什么要让结构体里的指针指来指去?
为什么要 RGBQUAD 定义两个指针(first 和 last)?
这样最后的一次RtlMoveMemory之前的偏移 16 改成偏移 12 也一样啊~
然后我根据国外分析的结构,在最后 RtlMoveMemory 之前的偏移 16 改成偏移 8 ,( BITMAPINFOHEADER 的指针)
之后拿 40 个位,就像 bmp 格式的 BitmapInfoHeader (主楼的那个)的方法来 unpack("L3S2L*"),
得出[40, Bitmap#width, Bitmap#height, 1, 32, 0, 0, 0, 0, 0, 0],(其实可以不 unpack ,写进bmp档案中)
我想苏应该知道我主楼那个的 BitmapInfoHeader 的某些值不同是无所谓的吧~
这说明了在 RM 的 Bitmap 类和 bmp 格式没什么分别的。
其实昨天本来是想研究 GIF 格式的,但网上的说明讲解不清楚,
而且有些几个关键数据弄成一个位,这个很麻烦。(又不知道那些数据有什么用)
之后想研究jpg,但jpg的延伸格式多的很...最后就研究了bmp了= =
做面向对象编程的时候,为什么要设计这么多类,又让类的成员引用来引用去?
rgss_bminfo_t#first 是实际的像素数据的最后一行开头
同时 BMP 还有自己的压缩标准,支持简单的 RLE、霍夫曼压缩,当然基本没什么实用价值。
但我认为非 Ruby 的话,不需要这样指来指去。(Ruby 接驳的 C 就不知道了)
可能是我不明白吧~...我只能这样说:
最后的一次 RtlMoveMemory 之前的偏移 16 和 12 得出的指针位置是一样的,
所以我认为没分别 rgss_bminfo_t#last 和 rgss_bminfo_t#first...
BMP 原意似乎是不压缩。但BitmapInfoHeader中[40, w, h, 1, 32, 0, 0, ......]
(红色部分)就决定了压缩法(与否),而橙色部分就是跟压缩后大小什么的有关(没记错的话)。
summer92 话说同格式的文件类型jpg,png,bmp文件头应该一样的把,音乐格式也是,- -
“引用”
如果让 B#a 和 B#b 都变为指针,sizeof (A) 就可以是 8 字节
而 `b.a = a;' 也仅仅是 8 个字节的拷贝而已。
我这里测试是不同的,不知道你那边是如何测试的。
http://msdn.microsoft.com/en-us/library/dd183376(v=vs.85).aspx
一箭烂YiJL 发表于 2011-5-30 18:27
我想 Bitmap 指针可能的其中一个原因是 Bitmap#get_pixel、set_pixel、blur......
就可以引用位图的("同 ...
"sizeof (B) 就可以是 8 字节"?
8 个字节?不解...
然全不知道 MSDN 有记载 Bmp 格式,但是没有给 压缩方式的域 的值(数字)讲解,
但是我记得顺序是 0~5 。我之前想压缩的时候用 png 的压缩法(Zlib 的那个),
将 biSizeImage 设置为压缩后的字节的 size。(可能是测试出错或是方法错误什么的),
出来的 bmp 说是损坏档案......
什么 Bitmap 指针?
又不是想用什么方法压缩就用什么方法压缩
可能的其中一个原因是 Bitmap#get_pixel、set_pixel、blur......
就可以引用位图的("同一个")颜色值数据作修改、读取......
我用的是 Zlib 的 DEFLATE (LZ77 + 霍夫曼) 算法,这样能够在 png 里解读。(研究 PNG 的时候发现 Zlib 还有 CRC 校验的算法)
那这是什么意思呢?
PNG 是另一种格式,标准自然不同。
表示这是一幅 PNG 图像。
These compression values are only valid for SetDIBitsToDevice and StretchDIBits when the hdc parameter specifies a printer device.
苏小脉 发表于 2011-6-3 10:52
这两个域是用在打印机硬件加速时的。
http://msdn.microsoft.com/en-us/library/dd145023(VS.85).aspx
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |