For-loop (Javascript里沒有這個函數(shù)):
對圖像中所有的點逐一進行操作,這里body lines are indented to show difference with other lines.
image = new SimpleImage ("flowers.jpg")
for(pixel:image){
? ? ?pixel.setRed(0);
? ? ?pixel.setBlue(0);
}
print(image)
Image Expressions
主要是講了一個pixel.getRed()函數(shù),這個函數(shù)可以直接獲取圖像中每一個pixel的rgb值,之后我們可以對它獲得的值進行乘法運算。這樣當我們想要對以后圖像的顏色進行調(diào)試時,可以不用具體的rgb值,只要嘗試相對的倍數(shù)就可以。
不過這個函數(shù)也是對圖像上所有的pixel來進行操作的。
image=new SimpleImage("flowers.jpg")
for(pixel:image){
? ? pixel.setGreen(pixel.getGreen() * 0.75)
}
print(image)
當然,可以把pixel.getGreen()賦給一個變量,然后再setGreen里直接用變量名。
image=new SimpleImage("flowers.jpg")
for(pixel:image){
old=pixel.getGreen()
pixel.setGreen(old* 0.75)
}
print(image)
Image Puzzel
這個section主要是講了一種調(diào)試顏色的思路。一張色調(diào)在黑-紅之間的金門大橋的照片,被一片藍綠色“雪花遮蓋”。這個圖像其實是所有pixel的r值被除了一個很大的值,導(dǎo)致pixel之間雖然r值的相互關(guān)系可以構(gòu)成一個圖像但暗度太低所以看不清,形成了一個黑色的畫布,上面的b/g值可以隨意設(shè)定顯現(xiàn)出任意,藍綠色圖像。
修復(fù)的方法就是把b/g值設(shè)成0,然后把所有pixel的r值等比增大就行。
Grayscale Images
當一個顏色r/g/b三個值相等的時候,它就處于灰色色譜上,不偏向于紅綠藍任何一種顏色。
怎么把彩色的圖片轉(zhuǎn)化成灰色的呢?如何衡量圖片上某個顏色的亮度呢?---答案是取r/g/b三個值的平均值。
image = new SimpleImage("flowers.jpg");
for (pixel: image) {
avg=[pixel.getRed()+pixel.getGreen()+pixel.getBlue()]/3
pixel.setRed(avg)
pixel.setGreen(avg)
pixel.setBlue(avg)
}
print(image);
其中求平均值的步驟必須放在for loop里面,因為每個pixel的明亮度不同,需要進行逐一計算。
提醒:經(jīng)過試驗,setGreen,getGreen函數(shù)后面必須要立馬跟上括號,但for和SimpleImage就沒有關(guān)系,不用立馬跟上。
Ps,第二課的作業(yè)試顏色真的是,沒有最好只有更好,每次我覺得已經(jīng)不錯了submit后還是不對,最后還是靠排列組合找出的最佳答案,囧!