Android Bitmap是黑色的

时间:2010-10-12 16:05:34

标签: android bitmap

我正在尝试将文本文件中的地图绘制到位图上,但是Bitmap全部为黑色

首先我加载一个看起来像这样(缩短)的文本文件:

<00> 0000000000(200宽)
0111111110
0111100010
0000111110
0000111000
0000000000
(120高)

“1”为地,“0”为墙,1应为白色,0应为黑色。

代码:

public Map(String map) {
    this.map = map;
    init();
}

public void init() {
    mapArray = new int[WIDTH*HEIGHT];
    String[] splitMap = map.split("\n");
    int width = splitMap[0].length();
    int height = splitMap.length;
    int[] colors = new int[WIDTH * HEIGHT];
    for(int y = 0; y < height; y++) {
        for(int x = 0; x < width; x++) {
            int type = Integer.valueOf(splitMap[y].charAt(x));
            setType(x, y, type);
            if(type == WALL) {
                setColor(x, y, Color.rgb(0, 0, 0), colors);
            } else if(type == GROUND) {
                setColor(x, y, Color.rgb(255, 255, 255), colors);
            } else if(type == GOAL) {
                setColor(x, y, Color.rgb(255, 255, 255), colors);
            }
        }
    }
    bitmap = Bitmap.createBitmap(colors, WIDTH, HEIGHT, Config.ARGB_8888);
}

public void setColor(int x, int y, int color, int[] colors) {
    for(int y1 = 0; y1 < 4; y1++) {
        for(int x1 = 0; x1 < 4; x1++) {
            colors[(x + x1) + (y + y1) * WIDTH] = color;
        }
    }
}

public void setPixel(int x, int y, int color) {
    for(int y1 = 0; y1 < 4; y1++) {
        for(int x1 = 0; x1 < 4; x1++) {
            bitmap.setPixel(x + x1, y + y1, color);
        }
    }
}

public void setType(int x, int y, int type) {
    for(int y1 = 0; y1 < 4; y1++) {
        for(int x1 = 0; x1 < 4; x1++) {
            mapArray[(x + x1) + (y + y1) * WIDTH] = type;
        }
    }
}

public int getType(int x, int y) {
    return mapArray[x + y * WIDTH];
}

public void doDraw(Canvas canvas) {
    canvas.drawBitmap(bitmap, 0, 0, null);
}

private final static int WALL = 0;
private final static int GROUND = 1;
private final static int GOAL = 2;
private final static int WIDTH = 800;
private final static int HEIGHT = 480;
private int[] mapArray = null;
private String map = null;
public Bitmap bitmap;

1 个答案:

答案 0 :(得分:1)

int type = Integer.valueOf(splitMap[y].charAt(x));

这就是导致问题的原因。

scala> Integer.valueOf('1')             
res3: java.lang.Integer = 49

scala> Integer.valueOf('0')
res4: java.lang.Integer = 48

问题是charAt为您提供了一个char,然后将其转换为整数。你真正想做的是Integer.parseInt(splitMap[y].substring(x,x+1)

Integer.valueOf("0".substring(0,1))  
res7: java.lang.Integer = 0

这说明了一个教训 - 永远不要在没有提供默认值的情况下留下switch语句;同样,永远不要留下if / else if / ...而不留下else。即使你期望永远不会打它,如果你这样做,你应该提出一些明显的错误信息;它会帮助你调试。