2017-03-05 70 views
-2

1级 import java.util.Scanner;车削图像GreyScale

public class Image { 

public static void main(String[] args) { 
    String filename = "test.ppm"; 
    TestClass img = new TestClass(filename); 

    StdDraw.setCanvasSize(img.getWidth(), img.getHeight()); 
    StdDraw.setXscale(0, img.getWidth()); 
    StdDraw.setYscale(0, img.getHeight()); 

    Scanner keyboard = new Scanner(System.in); 

    img.display(); 

    System.out.println("Type anything then enter"); 
    keyboard.next(); 

    TestClass modified = new TestClass(filename); 
    modified.removeReds(); 
    modified.display(); 
} 
} 

2级

import java.awt.Color; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class TestClass { 
private int width; 
private int height; 
private Color[][] data; 

public TestClass(String filename) { 
    Scanner fileIn = null; 
    try { 
     fileIn = new Scanner(new FileInputStream(filename)); 
    } catch (FileNotFoundException e) { 
     System.out.println("File not found"); 
     System.out.println("Looked in " + 
       System.getProperty("user.dir")); 
     System.exit(1); 
    } 

    // Header information 
    String format = fileIn.nextLine(); 
    width = fileIn.nextInt(); 
    height = fileIn.nextInt(); 
    int colorDepth = fileIn.nextInt(); 

    System.out.println("File: " + filename + " is " + width 
      + " x " + height + " pixels"); 

    // Verify file format 
    if (!format.equals("P3") || colorDepth != 255) { 
     System.out.println("Unknown format for file"); 
     System.exit(1); 
    } 

    // Read in data pixel by pixel 
    data = new Color[height][width]; 
    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      int red = fileIn.nextInt(); 
      int green = fileIn.nextInt(); 
      int blue = fileIn.nextInt(); 

      data[i][j] = new Color(red, green, blue); 
     } 
    } 
} 

public void display() { 
    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      StdDraw.setPenColor(data[i][j]); 
      StdDraw.point(j, height - i - 1); 
     } 
    } 
} 

public int getHeight() { 
    return height; 
} 
public int getWidth() { 
    return width; 
} 

public void removeReds() { 
    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      int red = data[i][j].getRed(); 
      int green = data[i][j].getGreen(); 
      int blue = data[i][j].getBlue(); 

      int sum = red+green+blue; 
      Color newColor = new Color(sum/3); 



     } 
    } 
} 
} 

,所以我需要turnn这个图像灰度。我知道你需要平平红绿蓝。我尝试过,但是当我每次运行程序时,它只是改变颜色使它们变得更暗

+1

[Converting RGB to grayscale/intensity]可能的重复(http://stackoverflow.com/questions/687261/converting-rgb-to-grayscale-intensity) – Jeremy

+0

我不认为我有重复的 – jackjackk1223

回答

0

据我所知,代码中没有任何地方实际上将像素的颜色修改为灰度值。您可以在removeRed()方法的for循环(应该将其称为greyScale()方法)中通过data[i][j] = newColor行执行此操作。就目前而言,您只需找到灰度色,然后将其丢弃,而且您也可能计算错误。

+0

是的,但是当我键入红色+绿色+蓝色/ 3,只是使颜色变深,它会将其变成灰色 – jackjackk1223

+0

你可以上传你正在做的这个图片吗,这样我就能看到你的代码对它做了什么吗? – UnknowableIneffable

+0

这不是一个链接,这是您的个人电脑上的文件的文件路径 – UnknowableIneffable