提问人:Michael243 提问时间:11/16/2023 最后编辑:Michael243 更新时间:11/16/2023 访问量:27
如何使用 Color.RGBtoHSB 显示从 RGB 转换的 HSB 图像?
How do I display an HSB image I converted from RGB using Color.RGBtoHSB?
问:
我有一张 RGB 色彩空间的 450x390 图像。使用 Color.RGBtoHSB() 我提取了每个像素的 HSB(色相、饱和度和亮度)值。如何显示此 HSB 图像?
-我尝试将值存储到 (3x450x390) 的 3d 数组中。我不知道如何将其转换为可显示的图像。
-我还尝试使用 (int)(hsbVals[i]*255) 转换 HSB 值,然后使用 img.setRGB 将原始像素替换为新的 HSB 像素,然后显示它。该图像带有浓重的蓝色调,而不是人们通常期望的灰度图像。
-我希望使用光栅来完成像 raster.setsamples() 这样的工作。但是由于我对 java 栅格的不熟悉以及缺乏在线文档,我遇到了麻烦。
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import javax.swing.JLabel;
public class example {
public static BufferedImage readImage(String url) {
BufferedImage img = null;
try {
img = ImageIO.read(new File(url));
} catch (IOException e) {
}
return img;
}
public static void showImage(Image img, String label) throws IOException {
ImageIcon icon=new ImageIcon(img);
JFrame frame=new JFrame(label);
frame.setLayout(new FlowLayout());
int width = img.getWidth(null);
int height = img.getHeight(null);
frame.setSize(width,height);
JLabel lbl=new JLabel();
lbl.setIcon(icon);
frame.add(lbl);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws IOException {
BufferedImage img = readImage("src/test_001.jpg");
showImage(img, "RGB image");
for(int i=0;i<450;i++) {
for(int j=0;j<390;j++) {
Color rgbColor = new Color(img.getRGB(i, j));
int r = rgbColor.getRed();
int g = rgbColor.getGreen();
int b = rgbColor.getBlue();
float [] hsbVals = new float[3];
Color.RGBtoHSB(r, g, b, hsbVals);
}
}
showImage(img, "HSB image");
}
}
答: 暂无答案
评论