关于像素,我们先来看一个图片
现在把红框区域放大10倍后,得到以下图片
你会发现,我们的这个图片其实是有一个个的小方块组成的
这些小方块叫做:pixels【像素】
- 他是小方块形状的
- 每一个独立的像素点只有一种颜色
以下是我们在计算机科学中如何对像素进行表示的一种方法从图像左上角开始的0,0直角坐标系,每一个像素对应一个横纵坐标
每一个像素又是由色彩三原色组成的,即Red,Green,Bule组成的。
现在我们来考虑一个复杂的功能计算机是怎么让一个图片整体变亮的呢?如果让你编写一段代码实现这个功能你会怎么写?
是不是把所有的像素点的数字都调的高一点就行了?
再详细点:
1.一行一行的过滤每一个像素
2.获得像素点的色彩三原色,存入到三个变量中
3.每一个变量表示的数字都调高一点重新显示
接着我们来用代码实现一遍.
这是一张像素为10*10的图片,我们把它的第一个像素换成红色
是不是看不出来啊?因为图片太小了,我们把它放大10倍,来看看,
效果就是这样的,我们来看看怎么实现的吧
override func viewDidLoad() {
super.viewDidLoad()
///添加图片控件,懒加载的
self.view.addSubview(imageView)
///初始化图片
let image = UIImage(named: "x")
///图片放大10倍
let scaleImage = image?.zoom(scle: 10)
///初始化RGB类,里面有一个pixels<Pixel>的数组,里面包括了一个像素的RGB色彩
let myRGB = ABGRImage.init(image: scaleImage!)!
///循环遍历里面每一个像素
for y in 0..<myRGB.height{
for x in 0..<myRGB.width{
let index = y*myRGB.height+x
var pixel=myRGB.pixels[index]
///因为图像放大10的原因,一个像素点放大了10呗
///判断第一个像素点的像素,把颜色设为红色
if y < 10 && x < 10 {
pixel.red = 255
}
///替换对应的RGB色彩
myRGB.pixels[index] = pixel
}
}
///生成新图片
let newImage = myRGB.toImage()
imageView.image = newImage
}
///懒加载
lazy var imageView: UIImageView = {
let imageView = UIImageView()
imageView.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
return imageView
}()
现在我们把四个角颜色都换成红色的。
代码是这样的:
for y in 0..<myRGB.height{
for x in 0..<myRGB.width{
let index = y*myRGB.height+x
var pixel=myRGB.pixels[index]
if (y < 10 && x < 10) || (y > 90 && x > 90) || (y < 10 && x > 90) || (x < 10 && y > 90){
pixel.red = 255
}
///替换对应的RGB色彩
myRGB.pixels[index] = pixel
}
}
是不是很简单啊,我们来试试把所有白色的换成红色的
你是怎么做的呢,是不是一个像素一个像素替换的呢?我们来看看代码
for y in 0..<myRGB.height{
for x in 0..<myRGB.width{
let index = y*myRGB.height+x
var pixel=myRGB.pixels[index]
if pixel.red > 200 && pixel.green > 200 && pixel.blue > 200 {
pixel.red = 255
pixel.blue = 0
pixel.green = 0
}
///替换对应的RGB色彩
myRGB.pixels[index] = pixel
}
}
我们应该知道,白色的Red,Blue,Green都是255,那么我们就有了判断那个像素是白的条件,接着把green,blue都设为0就可以了。
本章demo地址