2016-11-20 12 views
1

私は私が最初のステップを完了ASCIIコード画像 に画像を変換するプログラムを書く必要はなく、要件は、画像変換後にASCIIイメージを圧縮する方法はありますか?

the requiremnet

my work now

どのようにすることができますを圧縮する私を必要これを行う?私あなたが10で、それを圧縮したい場合にのみ、私はここに1

にすべての10 * 10ピクセルを圧縮する必要があることを知っていることは私のコード

// A method to convert color image to grayscale image 
public static BufferedImage toGrayScale(Image img) 
{ 
    // Convert image from type Image to BufferedImage 
    BufferedImage bufImg = convert(img); 

    // Scan through each row of the image 
    for(int j=0; j<bufImg.getHeight(); j++) 
    { 
     // Scan through each columns of the image 
     for(int i=0; i<bufImg.getWidth(); i++) 
     { 
      // Returns an integer pixel in the default RGB color model 
      int values=bufImg.getRGB(i,j); 
      // Convert the single integer pixel value to RGB color 
      Color oldColor = new Color(values); 

      int red = oldColor.getRed();  // get red value 
      int green = oldColor.getGreen(); // get green value 
      int blue = oldColor.getBlue(); // get blue value 

      // Convert RGB to grayscale using formula 
      // gray = 0.299 * R + 0.587 * G + 0.114 * B 
      double grayVal = 0.299*red + 0.587*green + 0.114*blue; 

      // Assign each channel of RGB with the same value 
      Color newColor = new Color((int)grayVal, (int)grayVal, (int)grayVal); 

      // Get back the integer representation of RGB color 
      // and assign it back to the original position 
      bufImg.setRGB(i, j, newColor.getRGB()); 
     } 
    } 
    // return back the resulting image in BufferedImage type 
    return bufImg; 
} 


    public static char[][] imageToASCII(Image img) 
    { 
    //convert the image to grayscale 
    BufferedImage bufImg = toGrayScale(img); 

    //get the width and height of the image 
    int width = bufImg.getWidth(); 
    int height = bufImg.getHeight(); 

    //These varibles are used to store the value of the colour model 
    int C1, C2, C3; 

    //create an array to store the output of each pixel 
    char[][] imageToASCII = new char[height][width]; 
    for(int i = 0; i < height; i++){ 
      for(int j = 0; j < width; j++){ 
       //get the colour value of each pixel 
       int value = bufImg.getRGB(j, i); 

       //get the value in the Blue sector of RGB model 
       C1 = value & 255;  

       //get the value in the Green sector of RGB model 
       C2 = (value >> 8) & 255; 

       //get the value in the Red sector of RGB model 
       C3 = (value >> 16) & 255; 

       //calculate the average gray value 
       int g = (C1 + C2 + C3)/3; 

       //check the given conditions and get the relative output 
       if (g >= 230)       
        imageToASCII[i][j] = ' '; 
       else if (g >= 200) 
         imageToASCII[i][j] = '.'; 
       else if (g >= 180) 
         imageToASCII[i][j] = '*'; 
       else if (g>= 160) 
         imageToASCII[i][j] = ':'; 
       else if (g >= 130) 
         imageToASCII[i][j] = 'o'; 
       else if (g >= 100) 
         imageToASCII[i][j] = '&'; 
       else if (g >= 70) 
         imageToASCII[i][j] = '8'; 
       else if (g >= 50) 
         imageToASCII[i][j] = '#'; 
       else 
         imageToASCII[i][j] = '@'; 

      } 
     } 

//return the array 
    return imageToASCII; 
    } 
} 
+0

'toGrayScale()'はどのように機能しますか? – ItamarG3

+0

イメージをグレースケールに変換するだけで、ASCIIイメージを圧縮する方法には影響しないので、投稿しなかったと思います。 –

+0

はい、どんなクラスですか?あなたが書いた方法ですか?そうであれば投稿してください – ItamarG3

答えて

0

です(new width = old width/10)、その後imageToASCII()に次の行を追加します。

bufImg = convert(bufImg.getScaledInstance(bufImg.getWidth()/10, bufImg.getHeight()/24, BufferedImage.SCALE_SMOOTH)); 

この行は、イメージをより小さなバージョンに変換します。

+0

なぜtoGrayScale()に追加するのですか? 私は変換されたイメージにcomrpessするつもりですが、変換する前にイメージを圧縮すると結果に影響しますか? –

+0

いいえ、実際は私は間違っていました。あなたは変換に追加する必要があります – ItamarG3

+0

しかしtoBufferedImageは何を意味していますか?私はそれを(BufferedImage)に変更しますが、これを実行した後には応答がありません –

関連する問題