2016年11月27日 星期日

三維陣列應用

/* 在數位彩色照片裡,每一個畫素(pixel)的顏色是由紅、綠與藍三個顏色混合而成的。 通常rgb的強度可用0~255的數值來表示。數值越大代表該顏色的強度越強。 照片的維度是二維因此恰可用一個二維的矩陣來表示它 每一個矩陣的元素即代表了一個畫素。 因每一個畫素必須是由紅、綠與藍三個顏色所組成 於是要正確的表示一張數為彩色照片的資料 最方便的方式就是利用三維矩陣。 下面是一個三維矩陣的示意圖,它代表了一個3*3畫素的彩色影像: (18 172 127) | (89 133 36) | (175 8 43) (234 224 113) |(128 151 40) | (35 48 75) (141 28 192) |(127 40 234) | (131 228 98) 紅色 綠色 藍色 (a) 試以一個三維的陣列來描述此一影像。 (b) 試將每一個畫素中的r值加30。若加30之後的值超過255,則以255取代之。 (c) 試將每一個畫素中的g值減30。若減30之後的值小 於0,則以0取代之。 P.S.(c)沿用(b)的值 */ public class ArrayEx4 { //三維陣列 int A[][][]= { { //R值(為第0維) {18,172,127}, {234,224,113}, {141,28,192} }, { //G值(為第1維) {89,133,36}, {128,151,40}, {127,40,234} }, { //B值(為第2維) {175,8,43}, {35,48,75}, {131,228,98} } };
public void print(){ for(int i=0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ for(int k=0;k<A[i][j].length;k++){ System.out.print("A["+i+"]"+"["+j+"]"+"["+k+"]="+A[i][j][k]+"\t"); } System.out.println(); //換行 } } }

public void Redadd(){ for(int i=0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ for(int k=0;k<A[i][j].length;k++){ if(i==0){ //找出R值 A[i][j][k]+=30; //R值都加30
if(A[i][j][k]>255){ A[i][j][k]=255; //超過255的值一律等於255 } } } } } } public void Greensub(){ for(int i=0;i<A.length;i++){ for(int j=0;j<A[i].length;j++){ for(int k=0;k<A[i][j].length;k++){ if(i==1){ //找出G值 A[i][j][k]-=30;
if(A[i][j][k]<0){ A[i][j][k]=0; }
} } } } }

public static void main(String[] args) { ArrayEx4 arr4=new ArrayEx4(); arr4.Redadd();
arr4.Greensub(); arr4.print(); } }

沒有留言:

張貼留言