一:单色图的扫描处理(本程序可以实现图片的透明化处理) 透明化处理思路:先得到图片的每个像素的数据,之后再根据数据重新绘制。
1,首先被扫面的图片必须为单色(0:表示黑色;1表示白色);
QImage newImage(width,height,QImage::Format_Mono); //高度、宽度、单色图片
2,使用QImage的scanline()函数得到每一行的首地址,再根据首地址即可得到图片的每一个字节的数据(注意:图片的数据是按字节存储);
3,图片的重新绘制(略)
代码注释
1,读取数据部代码
QImage image(imagePath); //根据图片路径,加载出图片
int row=0; //图片横向的字节数
row=image.width()/8; //得到图片的横向的字节数
if(image.width()%8) //如果字节数超过完整的字节,则字节增加1
{
row++;
}
unsigned char buf[32][32]={1}; //定义存储数据的数组
unsigned char *buffer; //临时变量
for(int i=0;i
{
buffer=image.scanLine(i); //得到该行的首地址
for(int j=0;j|
{
buf[i][j]=*buffer++;
qDebug()<"image><>
}
2,重新绘制图片的函数代码
QPixmap pix=QPixmap(image.width(),image.height()); //根据图片的宽度和高度,新建一个图片
pix.fill(Qt::transparent); //设置图片背景透明
QPainter p(&pix); //定义画家
unsigned char d;
for(int i=0;i
{
for(int j=0;j|
{
d=buf[i][j];
for(int k=0;k<8;k++)>
{
if((d&0x80)==0x80) //如果该位为黑点,则绘制,否则不绘制
p.fillRect( QRect(k+j*8,i,1,1), Qt::black);
d<>
}
}
}
二:其他类型的图片的扫描处理
1,首先得到待处理图片的某个像素点的数据,之后再得到某个分量的数据;
2,对数据进行相应的处理后就可以得到需要的数据;
代码注释详解
QColor pix; //存储耨个像素的数据
int blackValue=0; //像素数据的黑色分量
unsigned char t=0; //中间变量
for(int i=0;i
{
for(int j=0;j|
{
for(int k=0;k<>
{
if((j*8+k)>=image.width()) //可以解决坐标超出问题,QImage::setPixel: coordinate () out of range
{
continue;
}
pix=image.pixel(j*8+k,i); //得到每个像素点的数据
blackValue=pix.black(); //得到像素点的黑色分量值
if(blackValue>127)
{
setBits(t,1,k); //设置相应的数据位
}
else
{
setBits(t,0,k); //设置相应的数据位
}
}
buf[i][j]=t; //得到整个字节的数据
t=0;
}
}
//设置数据位的子函数
//参数解释:t 存储一个字节的数据
value:需要设置的数据
bit:需要设置的数据位
setBits(unsigned char &t,int value,int bit)
{
if(value)
{
t|=(0x80>>bit); //将相应的数据位置1
}
else
{
t&=~(0x80>>bit); //将相应的数据位清0
}
}
三:图片类常用的函数
1,图片镜射函数:QImage QImage::mirrored(bool horizontal = false, bool vertical = true) const
参数:横向镜射和纵向镜射
2,图片反色函数:
四:透明相关
1,将图片的的数据读出来,进行相应的处理,再重新绘制上去。
2,在绘制直线时,可以设置直线的线宽设置成小于1的数就可以使用绘制的内容透明,QPen pen;pen.setWidthF(0.5);
上面的线的宽度为0.5,下面的为1。
A line width of zero indicates a cosmetic pen. This means that the pen width is always drawn one pixel wide,
我的个人理解:Qt的画笔,至少是绘制一个像素点,当画笔的宽度设置的值小于1时,此时的画笔就是化妆笔。
五:打印相关,单色图(QBitmap)
需要打印时使用QBitmap处理会更好,会使得图片的效果更好
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。