图像转换器java
我在做图像处理,我有个问题 我想从项目中读取图像,并将图像转换为灰色。 我目前正在尝试使用rgb2gray函数进行转换,但仍然不起作用图像转换器java,java,bufferedimage,Java,Bufferedimage,我在做图像处理,我有个问题 我想从项目中读取图像,并将图像转换为灰色。 我目前正在尝试使用rgb2gray函数进行转换,但仍然不起作用 import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class ImageTesting extends Component {
private static int[] pixel;
private static BufferedImage b;
BufferedImage image;
public void paint(Graphics g) {
g.drawImage(image, 0, 0, null);
}
public ImageTesting() {
try {
image = ImageIO.read(new File("teste.jpg"));
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
if (image == null) {
return new Dimension(400, 400);
} else {
return new Dimension(image.getWidth(null), image.getHeight(null));
}
}
public static BufferedImage rgb2gray(BufferedImage bi) {
int heightLimit = bi.getHeight();
int widthLimit = bi.getTileWidth();
BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY);
for (int height = 0; height < heightLimit; height++) {
for (int width = 0; width < widthLimit; width++) {
Color c = new Color(bi.getRGB(width, height) & 0x00fffff);
int newRed = (int) ((0.2989f * c.getRed()) * 2);// 0.2989f//multiplicr po 2
int newGreen = (int) ((0.5870f * c.getGreen()) * 2);// 0.5870f
int newBlue = (int) ((0.1140f * c.getBlue()) * 2);
int roOffset = newRed + newGreen + newBlue;
converted.setRGB(width, height, roOffset);
}
}
return converted;
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
// TODO code application logic here
JFrame f = new JFrame("Load Image Sample");
JFrame g = new JFrame("Image RGB");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
g.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
f.add(new ImageTesting());
f.pack();
f.setVisible(true);
g.add(new ImageTesting());
rgb2gray(b);
}
}
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.Graphics;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
公共类ImageTesting扩展了组件{
私有静态int[]像素;
专用静态缓冲区映像b;
缓冲图像;
公共空间涂料(图g){
g、 drawImage(image,0,0,null);
}
公共图像测试(){
试一试{
image=ImageIO.read(新文件(“teste.jpg”);
}捕获(IOE异常){
}
}
公共维度getPreferredSize(){
if(image==null){
返回新维度(400400);
}否则{
返回新维度(image.getWidth(null)、image.getHeight(null));
}
}
公共静态BuffereImage rgb2gray(BuffereImage bi){
int heightLimit=bi.getHeight();
int widthLimit=bi.getTileWidth();
BuffereImage converted=新的BuffereImage(宽度限制、高度限制、BuffereImage.TYPE_BYTE_GRAY);
对于(int height=0;height
当我运行程序时,这些是出现的错误 如果有人能帮助我,我很感激。 谢谢 编辑:
我设法解决了这个问题,但现在又出现了另一个问题。为了继续我的工作,我想在生成的图像中找到最多10个brilhants点,然后返回另一个图像,索引中的黑色值为0,索引中的白色值为1,但此时我不知道计算步骤的最佳方法。主()方法,不是吗?创建两个完全相同的JFrame实例,然后添加显示原始图像的Imagetesting组件。最后运行rgb2gray时,结果不会发送到任何地方。我建议使用图像过滤器,请参阅此处的相关文档:
它性能好,使用简单。“我有一个疑问”把你的疑问留给二手车销售人员和政客吧。如果你有问题,问它(称之为问题)。你的问题是什么?你会犯什么错误?@AndrewThompson我不想批评你的措辞。很可能OP不是以英语为母语的人,可能没有意识到“我有一个疑问”是一个不寻常的短语。“这些是出现的错误”-你忘了发布错误了吗?编辑您的帖子,添加错误消息。这使得帮助您修复它们变得非常容易。您看过了吗?这些错误是:imagetesting.imagetesting.rgb2gray(imagetesting.java:52)imagetesting.main(imagetesting.java:91)Dmitry中线程“main”java.lang.NullPointerException中的异常,我设法解决了这个问题。谢谢你的帮助。