2011-07-02 4 views
2

Bitmapを逆さまにする方法は?Blackberry:ビットマップを逆さまにする方法は?

(これは別のプログラムでOpenGLテクスチャを読み込むために必要です)。ここで

は私の失敗試みです:

screenshot

stripe.png([email protected]の礼儀):

enter image description here

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; 
    } 
} 

答えて

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; 
     } 
    } 
+0

ありがとうございました! –

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度画像を反転するのに役立ちますが、これを試してみてください。

関連する問題