如何翻转Bitmap倒置?
(我需要这个在另一个程序中加载OpenGL纹理)。
这是我失败的尝试:
stripe.png(由Pitr@OpenClipart提供):
Flip.java:
import net.rim.device.api.system.*;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
public class Flip extends UiApplication {
public static void main(String args[]) {
Flip app = new Flip();
app.enterEventDispatcher();
}
public Flip() {
pushScreen(new MyScreen());
}
}
class MyScreen extends MainScreen {
static final Bitmap STRIPE = flip(Bitmap.getBitmapResource("stripe.png"));
public MyScreen() {
setTitle("Flip the bitmap");
add(new BitmapField(STRIPE));
add(new ButtonField("Hello world"));
}
static Bitmap flip(Bitmap bitmap) {
int[] argb = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getARGB(argb, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int i = 0; i < bitmap.getHeight(); i++) {
for (int j = 0; j < bitmap.getWidth(); j++) {
int swap = argb[i * bitmap.getWidth() + j];
argb[(bitmap.getHeight() - 1 - i) * bitmap.getWidth() + j] = swap;
}
}
bitmap.setARGB(argb, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
return bitmap;
}
}
答案 0 :(得分:3)
尝试使用这段代码:
for (int y = 0; y < bitmap.getHeight() / 2; y++) {
int upper_row = bitmap.getWidth() * y;
int lower_row = bitmap.getWidth() * (bitmap.getHeight() - 1 - y);
for (int x = 0; x < bitmap.getWidth(); x++) {
int temp = argb[upper_row + x];
argb[upper_row + x] = argb[lower_row + x];
argb[lower_row + x] = temp;
}
}
答案 1 :(得分:0)
public Bitmap flip(Bitmap bitmap) {
int[] argb = new int[bitmap.getWidth() * bitmap.getHeight()];
int[] argb_flip = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getARGB(argb, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
for (int i = 0; i < bitmap.getHeight(); i++) {
for (int j = 0; j < bitmap.getWidth(); j++) {
int swap = argb[i * bitmap.getWidth() + j];
argb_flip[(bitmap.getHeight() - 1 - i) * bitmap.getWidth() + j] = swap;
}
}
bitmap.setARGB(argb_flip, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
return bitmap;
}
试试这个,肯定会帮助你将图像翻转180度。