计算机可以使用两种方式来显示图像:
一:点阵文件:又名:取样图像、点阵图像、位图图像。从现实世界中通过数字化设备(扫描仪)获取的图。点阵文件缩放会失真,保存起来占用空间比较大。
主要的参数有1. 图像大小(分辨率):图像分辨率=垂直分辨率(矩阵的行数)X水平分辨率(矩阵的列数)。
2. 颜色空间的类型(颜色模型):指彩色图像所使用的颜色描述方法,指代RGB、YUV等。
3. 像素深度 :像素的所有颜色分量的二进位数之和 一般24位使用3字节表示就可称为真彩色。
常用图像文件格式:bmp/tif/gif/jpeg/jpeg
1. BMP:无损,Windows使用的标准图像格式,几乎所有Windows应用软件都支持
2. TIF:无损,大量用于扫描仪和桌面出版
3.GIF:无损,压缩比可调,文件特别小——颜色数较少(不超过256色),用于色彩数要求不高的场合作为插图、剪贴画等使用,支持透明背景,具有渐进显示功能,形成动画效果,适合网络传输
4. JPEG:大多有损,适用范围最广(国际标准)、可支持有损压缩、主要应用领域之一是数码相机
5.JP2(JPEG 2000):有损/无损,特别采用了小波分析等先进算法,兼容JPEG,压缩率更高,比JPEG好,更适合网上传输
二、矢量文件:使用数学方程,形状参数等。矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。矢量图相比于位图很多优点,可以无限放大或缩小,且不会有任何损失,文件体积较小,编辑灵活。
直线算是计算机图形入门的最最基础的了,就从它入手了!那么在屏幕上如何画出一条直线呢。
由图可以看出我们需要一定的算法来进行选择像素点来保证画出的直线是比较理想的。
当然画出一条直线我们使用数学方程 y = Kx + b.当我们确定两点的坐标很容易计算出斜率K的值跟b的值,然后该改变x的值就能求出y的值,反之依然。
当然一些一些坐标值的整数变化:
p(1.7,0.8)------->取整 p(1,0) 这样误差比较大,我们采用 p(1.7,0.8)------->+0.5 p(2.2,1.3)------->取整 p(2,1)
计算机速度固然很快,可是这样成千上百此的调用速度方面也会略显不足,每次计算要使用乘法还要一次四舍五入,所以我们要改进算法更加高效。有三种改进的方法,此下一一介绍:
一、数值微分法(DDA)是一种基于直线的微分方程来生成直线的方法。
数学推导过程:采用别人的图片,嘿嘿偷懒了!
将乘法转换成加法会极大的增加运算的速度。
void DDA(float x1, float y1, float x2, float y2)//x1,y1起始点,x2,y2终止点 { int i, temp; int x0 = 0, y0 = 0; //坐标轴原点 float x, y, delta_x, delta_y, dx, dy; dx = x2 - x1; dy = y2 - y1; if (fabs(dx) >= fabs(dy)) //确定斜率K是正还是负,确定采用x坐标为基准还是Y坐标 temp = fabs(dx); //求出绝对值 else temp = fabs(dy);
delta_x = float(1.0*dx / temp); //一个值为1.0,一个值小于1.0 delta_y = float(1.0*dy / temp); x = x1; y = y1; putpixel((x + x0), (y0 - y),颜色); //画点 for (i = 1; i <= temp; i++) { x = x + delta_x; y = y + delta_y; putpixel((x + x0), (y0 - int(y + 0.5)), 颜色); //y+0.5四舍五入运算 Sleep(50); //两个点间隔50毫秒 } }
二、中点画线法
三、Bresenham算法
下次写---待续