位图基础知识
位图图像或者点阵图,由称作像素(图片元素)的单个点组成的。如BMP图像
图像数字化的精度包括两个部分, 即分辨率和颜色深度。
一张图分辨率如640480,表示在图像没有缩放的前提下,水平方向640个像素点,垂直方向480个像素点。一个指图片的像素数多少,就是在横向上和纵向上有多少个像素,组成一个矩阵,就是你看到的图片,比如你听到的800600,1600*1200等。
数字图像的颜色深度表示每个像素所占的 二级制位数。颜色深度越大则能表示的颜色数目越多,计算机中常用的图像文件类型如下:
1.单色图像
每个像素只占一位,其值只有0或者1,代表黑白颜色。也成为1位图像。一般由黑色区域和白色区域构成。
2.灰度图
灰度图的存储文件带有图像颜色表,此颜色表分为256项,图像颜色表中的每一表项由RGB三种颜色分量组成,并且RGB颜色的分量值都相等
在一张图片的每个像素中可以直接存放其rgb值!当然:我们也可以存放一个索引值,通过这个索引值去其对应的颜色表中去查找对应的颜色的rgb值来进行绘制。这种像素中存放索引值而不是实际rgb值的模式在Qt中有:QImage::Format_Indexed8,亦即:用8位来存放一个索引值。
如下代码为给一个不带颜色表的图片数据添加颜色表代码,Qt实现:
QFile file("D:/pic/1.bmp");
file.open(QIODevice::ReadOnly);
QByteArray t = file.readAll();
char *b = t.data();
QImage image((const uchar *)(b),480,640,QImage::Format_Indexed8);
QVector<QRgb> grayTable;
unsigned int rgb=0;
for(int i= 0; i< 256;i++)
{
grayTable.append(rgb);
rgb+=0x010101;
}
image.setColorTable(grayTable);
image.save("2.bmp","bmp");
//或者
QVector<QRgb> grayTable;
for(int i = 0; i < 256; i++)
graytable.push_back(qRgb(i,i,i));
qi->setColorTable(grayTable);