将Color设置为int值以在setRGB(int x,int y,int rgb)方法中使用? – Java

抛开任何其他错误,我需要一种将我的Color grayScale转换为int的方法。 当我插入颜色时,我收到一个错误。 setRGB方法将x,ay和rgb int作为参数。 如何将我的颜色更改为int?

import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; import javax.swing.*; import java.awt.image.*; import javax.imageio.ImageIO; public class Picture{ Container content; BufferedImage image, image2; public Picture(String filename) { File f = new File(filename); //assume file is the image file try { image = ImageIO.read(f); } catch (IOException e) { System.out.println("Invalid image file: " + filename); System.exit(0); } } public void show() { final int width = image.getWidth(); final int height = image.getHeight(); JFrame frame = new JFrame("Edit Picture"); //set frame title, set it visible, etc content = frame.getContentPane(); content.setPreferredSize(new Dimension(width, height)); frame.pack(); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //add a menubar on the frame with a single option: saving the image JMenuBar menuBar = new JMenuBar(); frame.setJMenuBar(menuBar); JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); JMenuItem saveAction = new JMenuItem("Save"); fileMenu.add(saveAction); JMenuItem grayScale = new JMenuItem("Grayscale"); fileMenu.add(grayScale); grayScale.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { grayscale(width, height); } }); //add the image to the frame ImageIcon icon = new ImageIcon(image); frame.setContentPane(new JLabel(icon)); //paint the frame frame.setVisible(true); frame.repaint(); } public void grayscale(int width, int height) { for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { Color color = new Color(image.getRGB(i, j)); int red = color.getRed(); int green = color.getGreen(); int blue = color.getBlue(); int rGray = red*(1/3); int gGray = green*(2/3); int bGray = blue*(1/10); Color grayScale = new Color(rGray, gGray, bGray); image.setRGB(i,j, grayScale); } } show(); } public static void main(String[] args) { Picture p = new Picture(args[0]); p.show(); } } 

根据trashgod的评论。

灰度图像

 import java.awt.*; import java.awt.event.*; import java.util.*; import java.io.*; import javax.swing.*; import java.awt.image.*; public class Picture{ Container content; BufferedImage image; BufferedImage image2; public Picture(BufferedImage image) { this.image = image; grayscale(); } public void show() { JFrame frame = new JFrame("Edit Picture"); //set frame title, set it visible, etc content = frame.getContentPane(); frame.setResizable(false); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //add the image to the frame ImageIcon icon = new ImageIcon(image2); frame.setContentPane(new JLabel(icon)); frame.pack(); //paint the frame frame.setVisible(true); } public void grayscale() { // create a grayscale image the same size image2 = new BufferedImage( image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY); // convert the original colored image to grayscale ColorConvertOp op = new ColorConvertOp( image.getColorModel().getColorSpace(), image2.getColorModel().getColorSpace(),null); op.filter(image,image2); show(); } public static void main(String[] args) { int size = 120; int pad = 10; BufferedImage bi = new BufferedImage( size, size, BufferedImage.TYPE_INT_RGB); Graphics g = bi.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0,0,size,size); g.setColor(Color.YELLOW); g.fillOval(pad,pad,size-(2*pad),size-(2*pad)); g.dispose(); Picture p = new Picture(bi); p.show(); } } 
 image.setRGB(i, j, grayScale.getRGB()); 

看看实际具有的值(1/3)(2/3)(1/10) ,然后注意您将redgreenblue值乘以这些数字。

颜色是一个对象。 rgb是一个int。 使用colorName.getRGB()获取该颜色的整数RGB值。