我正在研究Android中的遊戲,並且我正在繪製Bitmap
對象。他們使用Matrix
類進行旋轉。我遇到的問題是能夠訪問旋轉的Bitmap
的像素。當我旋轉後訪問它們時,像素仍然代表未旋轉的版本。有沒有人有任何想法?也許我可以旋轉基於任意度數的像素數組?我已經看到了基於新旋轉的圖像即時創建新位圖的解決方案,但由於性能問題,我無法做到這一點。謝謝!從旋轉位圖獲取像素Android
這裏是我目前正在繪製位圖(位圖使用矩陣作爲其位置繪製)...
canvas.drawBitmap(bitmapPlayer, positionMatrix, null);
這裏是我創建positionMatrix變量...
Matrix m = new Matrix();
m.postRotate(degrees, bitmapCenterX, bitmapCenterY);
positionMatrix.set(m);
這裏是我訪問當前的像素(這訪問像素陣列I中創建的)...
getPixel(x, y);
這裏是我建,我試圖修改像素陣列...
// Build pixel 2d array
pixelData = new int[bitmapPlayer.getWidth()][bitmapPlayer.getHeight()];
for(int x=0; x<bitmapPlayer.getWidth(); x++) {
for(int y=0; y<bitmapPlayer.getHeight(); y++) {
pixelData[x][y] = bitmapPlayer.getPixel(x, y);
}
}
這裏是我試圖操縱陣列...
public void rotatePixels(int degrees) {
int[][] newPixelData = new int[bitmapPlayer.getWidth()][bitmapPlayer.getHeight()];
double cos = Math.cos(Math.toRadians(degrees));
double sin = Math.sin(Math.toRadians(degrees));
for(int x=0; x<bitmapPlayer.getWidth(); x++) {
for(int y=0; y<bitmapPlayer.getHeight(); y++) {
if(pixelData[x][y] != 0) {
int currentX = x + getTopLeftX();
int currentY = y + getTopLeftY();
int nextX = (int)((currentX * cos) - (currentY * sin));
int nextY = (int)((currentX * sin) + (currentY * cos));
if(nextX >= 0 && nextX < bitmapPlayer.getWidth() && nextY >= 0 && nextY < bitmapPlayer.getHeight()) {
newPixelData[nextX][nextY] = 1;
}
}
}
}
this.pixelData = newPixelData;
}
請向我們顯示您的代碼。 – poitroae 2012-02-08 20:05:34
@Michael我用一些代碼更新了我的帖子。 – 2012-02-08 20:17:18