作者IOP14759 (iop14759)
看板C_and_CPP
标题[问题] BMP资料结构请教
时间Mon Aug 21 15:15:33 2023
开发平台(Platform): (Ex: Win10, Linux, ...)
WIN7
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Graphics.hpp
问题(Question):
该如何分析1像素1bit的bmp档
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
TColor pixelColor = bmp->Canvas->Pixels[x][y]; //抓取像素点[宽][高]的RGB值
r = GetRValue(pixelColor);
g = GetGValue(pixelColor);
b = GetBValue(pixelColor);
补充说明(Supplement):
我用小画家画一张简单的图,画布大小是50*60像素
上半部是R=255/G=0/B=0的纯红,下半部是B=255/G=0/R=0的纯蓝
这时候去读BMP的结构,OK跟网路上说的一样我都能看得懂,1CH-1DH=24(1像素24位元),
然後从36H开始分析像素矩阵的RGB都符合原图
在C++Builber中使用#include <Graphics.hpp>中的GetRValue,GetGValue,GetBValueu也
都正确抓出R/B=255的值
然後使用线上绘图(photopea)把亮度修改到10%,再去读BMP的资料,我发现1CH-1DH=1(1
像素1位元),整个像素矩阵我都看不懂了,我上网查是说1bit的图档应该是只有黑跟白
https://upload.cc/i1/2023/08/21/ifxceV.png
但是我用GetRValue,GetGValue,GetBValueu指令去抓,反而能抓到红色和蓝色=0x19的值
,转DEC是25刚好符合255的10%
既然用指令可以抓表示这结构一定是对的,那麽想请问在1像素占1bit时的像素矩阵要怎
麽去分析
是否有相关关键字或书籍名称可以分享给我,谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.158.217 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1692602138.A.DF8.html
1F:推 xam: 学了两年都还停在BMP档吗? 08/21 16:12
之前只是稍微看一下知道个大概而以,现在才开始动手
※ 编辑: IOP14759 (60.248.158.217 台湾), 08/21/2023 16:14:50
2F:→ stupid0319: 1bit的黑白bmp,好像自由定义,有的程式1=黑,有的1=白 08/21 16:34
3F:→ stupid0319: 就把110001110110..写出来,然後8个bit变byte就可以了 08/21 16:35
4F:推 yvb: 根据 0AH-0BH 和 0EH-0FH, 可知 36H-3DH 有 color table. 08/21 17:37
5F:→ yvb: google: bmp color table => 有些reader忽略color table... 08/21 20:24
6F:→ yvb: 直接假设0为黑1为白. 08/21 20:27
7F:→ longlongint: 1楼的人生经历了什麽创伤? 08/26 09:43
8F:→ longlongint: 我没兴趣耶 但就看BMP文件? 08/26 10:55
9F:→ longlongint: 真的要补知识就 计概 C语言二进位读档 影像处理 08/26 10:56
10F:→ longlongint: 还有修资料压缩课(误 08/26 10:57
11F:→ xam: 因为我看他前年就在问BMP档案格式.. 08/26 11:21
12F:→ lycantrope: 反正符合板规,就算跟两年前一样问bmp,也只能给过 08/26 15:21
13F:推 TeaEEE: 0x36-0x3d是条色盘,0x3e开始才是资料 08/27 14:18
14F:→ MOONRAKER: 他就明显卡住想不通 七楼还回答RTFM有什麽意义吗 08/28 09:18
15F:→ MOONRAKER: 是谁人生创伤阿颗 08/28 09:18
16F:→ eye5002003: 没人质疑那个线上软体为什麽要乱改格式吗?? 08/28 21:35