0

ビットマップを使用して、dicom画像のネガを表示したい

public static Bitmap getNegativeImage(Bitmap img) {
            int w1 = img.getWidth();
            int h1 = img.getHeight();
            // int value[][] = new int[w1][h1];
            Bitmap gray = Bitmap.createBitmap(
                    w1, h1, img.getConfig());
            int value, alpha, r, g, b;
            for (int i = 0; i < w1; i++) {
                for (int j = 0; j < h1; j++) {
                    value = img.getPixel(i, j); // store value

                    alpha = getAlpha(value);
                    r = 255 - getRed(value);
                    g = 255 - getGreen(value);
                    b = 255 - getBlue(value);

                    value = createRGB(alpha, r, g, b);
                    gray.setPixel(i, j, value);
                }
            }
            return gray;
        }

        public static int createRGB(int alpha, int r, int g, int b) {
            int rgb = (alpha << 24) + (r << 16) + (g << 8) + b;
            return rgb;
        }

        public static int getAlpha(int rgb) {
            return (rgb >> 24) & 0xFF;
        }

        public static int getRed(int rgb) {
            return (rgb >> 16) & 0xFF;
        }

        public static int getGreen(int rgb) {
            return (rgb >> 8) & 0xFF;
        }

        public static int getBlue(int rgb) {
            return rgb & 0xFF;
        }

ただし、反転(ネガティブ)画像は黒く塗りつぶされ、もう一度クリックすると元の画像が表示されますが、反転画像は表示されません。

よろしくSathyaUM

4

1 に答える 1

5

コードが機能しない理由はわかりませんが、次のようにする必要があります。

private static final int RGB_MASK = 0x00FFFFFF;

public Bitmap invert(Bitmap original) {
    // Create mutable Bitmap to invert, argument true makes it mutable
    Bitmap inversion = original.copy(Config.ARGB_8888, true);

    // Get info about Bitmap
    int width = inversion.getWidth();
    int height = inversion.getHeight();
    int pixels = width * height;

    // Get original pixels
    int[] pixel = new int[pixels];
    inversion.getPixels(pixel, 0, width, 0, 0, width, height);

    // Modify pixels
    for (int i = 0; i < pixels; i++)
        pixel[i] ^= RGB_MASK;
    inversion.setPixels(pixel, 0, width, 0, 0, width, height);

    // Return inverted Bitmap
    return inversion;
}

Bitmap の変更可能なコピーを作成し(すべての Bitmap がそうであるとは限りません)、すべてのピクセルの RGB 部分を反転し、アルファをそのまま残します。

編集 コードが機能しない理由がわかりました。ピクセルが AARRGGBB であると仮定しています

于 2012-08-07T10:38:48.040 に答える