我有一个方法,但我认为它有点复杂。别担心我会在这里我会尽力为你说清楚=)
1:所以首先你必须创建一个 BufferedImage 对象
BufferedImage theImage = ImageIO.read(new File("pathOfTheImage.extension"));
2:将 BufferedImage 转换为 int 数组。您应该创建一种方法来为您做到这一点
public static int[] rasterize(BufferedImage img) {
int[] pixels = new int[img.getWidth() * img.getHeight()];
PixelGrabber grabber = new PixelGrabber(img, 0, 0, img.getWidth(),
img.getHeight(), pixels, 0, img.getWidth());
try {
grabber.grabPixels();
} catch (InterruptedException e) {
e.printStackTrace();
}
return pixels;
}
3:现在你有一个整数一维数组,其中包含所有像素作为一个大的连接整数,如果你想单独操作颜色,那么你必须创建另外 4 个方法:getRed(int):int,getGreen(int):整数,getBlue(整数):整数。这三种方法为您提供每种颜色的渐变(0 ~ 255)。最后一种方法 makeRGB(int,int,int) : int. 此方法从 RGB 颜色分量创建像素。这是每个方法的核心^^:
public static int getRed(int RGB) {
return (RGB >> 16) & 0xff;
}
public static int getGreen(int RGB) {
return (RGB >> 8) & 0xff;
}
public static int getBlue(int RGB) {
return RGB & 0xff;
}
public static int makeRGB(int red, int green, int blue) {
return ((red << 16) & 0xff) + ((green << 8) & 0xff) + (blue & 0xff);
}
4:最后要说的就是如何把int数组再转成BufferedImage。这是制作它的代码;)
public static BufferedImage arrayToBufferedImage(int[] array, int w, int h) {
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
WritableRaster raster = (WritableRaster) image.getData();
raster.setPixel(0, 0, array);
return image;
}
希望对你有所帮助,萨拉姆