将Color设置为int值以在setRGB(int x,int y,int rgb)方法中使用? - Java [英] Set Color as int value for use in setRGB(int x, int y, int rgb) method? -- Java

查看:1988
本文介绍了将Color设置为int值以在setRGB(int x,int y,int rgb)方法中使用? - Java的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Any other errors aside, I need a way of converting my Color grayScale into an int. When I plug in the Color, I get an error. setRGB method takes an x, a y, and an rgb int as parameters. How do I change my Color into an 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();
    }
}


推荐答案

As每条评论由trashgod。

As per comment by 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();
    }
}

这篇关于将Color设置为int值以在setRGB(int x,int y,int rgb)方法中使用? - Java的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆