黑莓:如何翻转位图?

发布于 2024-11-18 05:23:25 字数 1803 浏览 3 评论 0原文

如何翻转 位图< /a> 颠倒了?

(我需要这个来在另一个程序中加载 OpenGL 纹理)。

这是我失败的尝试:

screenshot

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

How to flip a Bitmap upside down?

(I need this for loading an OpenGL texture in another program).

Here is my failed try:

screenshot

stripe.png (courtesy of Pitr@OpenClipart):

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

好听的两个字的网名 2024-11-25 05:23:25

尝试使用这段代码:

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

Try using this bit of code:

    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;
        }
    }
多像笑话 2024-11-25 05:23:25
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度。

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

Try this, surely it will help you to flip the image by 180 degrees.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文