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

但是反转(负)图像变黑,再次单击时会出现原始图像但不显示反转图像。

问候沙迪亚 UM

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

它创建位图的可变副本(并非所有位图都是),反转所有像素的 rgb 部分,保持 alpha 不变

编辑 我知道你的代码为什么不起作用:你假设像素是 AARRGGBB

于 2012-08-07T10:38:48.040 回答