Я работаю над игрой на Android, и у меня есть Bitmap
объекты, нарисованные. Они вращаются с использованием класса Matrix
. Проблема, с которой я сталкиваюсь, заключается в доступе к пикселям повернутого Bitmap
. Когда я обращаюсь к ним после вращения, пиксели по-прежнему представляют собой невращающуюся версию. У кого-нибудь есть идеи? Может быть, я могу повернуть матрицу пикселей на основе произвольного количества градусов? Я видел решения, которые создают новые растровые изображения «на лету» на основе вновь повернутых изображений, но я не могу этого сделать из-за проблем с производительностью. Благодаря!Получите пиксели с вращающегося растрового изображения Android
Вот как я рисую растрового изображения в настоящее время (Растровое изображение рисуется с использованием матрицы в качестве своей позиции) ...
canvas.drawBitmap(bitmapPlayer, positionMatrix, null);
Вот как я создаю переменную positionMatrix ...
Matrix m = new Matrix();
m.postRotate(degrees, bitmapCenterX, bitmapCenterY);
positionMatrix.set(m);
Вот как я получить доступ к пикселям в настоящее время (этот доступ массива пикселей, который я создал ниже) ...
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
@Michael I обновил свой пост с помощью некоторого кода. –