有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在setRGB(intX,intY,intRGB)方法中使用的图像设置颜色为int值?JAVA

除了其他错误,我需要一种将颜色灰度转换为int的方法。当我插入颜色时,我会得到一个错误。setRGB方法将x、y和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();
    }
}

共 (4) 个答案

  1. # 1 楼答案

    根据垃圾神的评论

    Gray Scale image

    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();
        }
    }
    
  2. # 2 楼答案

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

  3. # 3 楼答案

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

  4. # 4 楼答案

    image.setRGB(i, j, grayScale.getRGB());