Java 如何获取图片';s每个像素的十六进制代码并另存为字符串

Java 如何获取图片';s每个像素的十六进制代码并另存为字符串,java,image,bufferedimage,hex,Java,Image,Bufferedimage,Hex,我试图用Java制作一个RPG游戏,但在构建关卡时遇到了一个问题。它没有得到正确的十六进制代码。下面是有问题的循环和开关语句: public void loadLevel(BufferedImage levelImage){ tiles = new int[levelImage.getWidth()][levelImage.getHeight()]; for (int y = 0; y < h; y++) { for (int x = 0; x < w

我试图用Java制作一个RPG游戏,但在构建关卡时遇到了一个问题。它没有得到正确的十六进制代码。下面是有问题的循环和开关语句:

public void loadLevel(BufferedImage levelImage){
    tiles = new int[levelImage.getWidth()][levelImage.getHeight()];
    for (int y = 0; y < h; y++) {
        for (int x = 0; x < w; x++) {
            Color c = new Color(levelImage.getRGB(x, y));
            String h = String.format("&02x%02x%02x", c.getRed(),c.getGreen(),c.getBlue());

            switch(h){
            case "00ff00"://GRASS Tile - 1
                tiles[x][y] = 1;
                System.out.println("Found Grass");
                break;
            case "808080"://Stone -2
                tiles[x][y] = 2;
                System.out.println("Found STONE");
                break;
            case "894627"://Dirt -3
                tiles[x][y] = 3;
                break;
            case "404040"://Rock -4
                tiles[x][y] = 4;
                break;
            case "00b700"://Tree -5
                tiles[x][y] = 5;
                break;
            case"000000"://Wall -6
                tiles[x][y] = 6;
                break;
            default:
                tiles[x][y] = 1;
                System.out.println("Did not find anything");
                System.out.println(h);
                break;

            }
public void加载级别(buffereImage级别图像){
tiles=newint[levelImage.getWidth()][levelImage.getHeight()];
对于(int y=0;y

现在,字符串被设置为
&02x0000
的一些变体,任何想法/修订都会非常有用!

&02x%02x%02x
更改为
%02x%02x
。修复了Jesper

的问题。那么,为什么在第一个十六进制数的格式字符串中使用
&
而不是
%
%02x
而不是
&02x%02x%02x
。哇……我不知道我怎么会错过了。非常感谢您指出这一点。这与问题(您现在已经解决了:-)没有太大关系,但有一个更简单的代码和更好的性能提示:不要转换为字符串,只需使用
int h=levelImage.getRGB(x,y)&0x00FFFFFF
屏蔽RGB值,并
开关(h){case 0x00ff00:
等,打开十六进制值。