/*
 在數位彩色照片裡,每一個畫素(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();  
}
}
沒有留言:
張貼留言