一个30*30的bmp图片文件,为什么有2756个像素数据?
A 30*30 bmp image file, why does it have 2756 pixel data?
我有一个大小为 30*30 的 bmp 文件。
在python中,我使用
im = Image.open("big.bmp")
rgb_img_data = list(im.getdata())
len = len(rgb_img_data)
获得 900
所以我猜真实的图像数据应该是900*3 = 2700 (r,g,b)
但是我用read()函数读取图像数据。
去掉页眉和页脚,得到2756条这样的数据,
11110101
(我转成二进制,'11110101'是一个数据项,这样得到2756个数据项)
感谢您的帮助!
因为图像文件有 header 信息,它不是 100% 像素数据,那是行不通的。
并且 header(版本 3,参见 BITMAPV3INFOHEADER)BMP 是 56 字节。
这就是您通常使用库来读取位图的原因,它使您不必处理文件格式的内部结构。
来自维基:
表示位图像素的位被打包成行。每行的大小通过填充向上舍入为 4 字节的倍数(32 位 DWORD)。
对于高度 > 1 的图像,连续存储多个填充行,形成一个像素数组。
与颜色映射、压缩技术一起使您的计算无效。希望这有帮助。
我有一个大小为 30*30 的 bmp 文件。
在python中,我使用
im = Image.open("big.bmp")
rgb_img_data = list(im.getdata())
len = len(rgb_img_data)
获得 900
所以我猜真实的图像数据应该是900*3 = 2700 (r,g,b)
但是我用read()函数读取图像数据。
去掉页眉和页脚,得到2756条这样的数据,
11110101
(我转成二进制,'11110101'是一个数据项,这样得到2756个数据项)
感谢您的帮助!
因为图像文件有 header 信息,它不是 100% 像素数据,那是行不通的。
并且 header(版本 3,参见 BITMAPV3INFOHEADER)BMP 是 56 字节。
这就是您通常使用库来读取位图的原因,它使您不必处理文件格式的内部结构。
来自维基:
表示位图像素的位被打包成行。每行的大小通过填充向上舍入为 4 字节的倍数(32 位 DWORD)。 对于高度 > 1 的图像,连续存储多个填充行,形成一个像素数组。
与颜色映射、压缩技术一起使您的计算无效。希望这有帮助。