Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-swt-dev] Pixel format for ImageData


You can you the palette data to bit-shift and mask the integer into its RGB components.

Here's an example from GEF:

public static ImageData createShadedImage(Image fromImage, Color shade) {
        org.eclipse.swt.graphics.Rectangle r = fromImage.getBounds();
        ImageData data = "">
        PaletteData palette = data.palette;
        if (!palette.isDirect) {
                /* Convert the palette entries */
                RGB [] rgbs = palette.getRGBs();
                for (int i = 0; i < rgbs.length; i++) {
                        if (data.transparentPixel != i) {
                                RGB color = rgbs [i];
                                color.red = determineShading(color.red, shade.getRed());
                                color.blue = determineShading(color.blue, shade.getBlue());
                                color.green = determineShading(color.green, shade.getGreen());
                        }
                }
                data.palette = new PaletteData(rgbs);
        } else {
                /* Convert the pixels. */
                int[] scanline = new int[r.width];
                int redMask = palette.redMask;
                int greenMask = palette.greenMask;
                int blueMask = palette.blueMask;
                int redShift = palette.redShift;
                int greenShift = palette.greenShift;
                int blueShift = palette.blueShift;
                for (int y = 0; y < r.height; y++) {
                        data.getPixels(0, y, r.width, scanline, 0);
                        for (int x = 0; x < r.width; x++) {
                                int pixel = scanline[x];
                                int red = pixel & redMask;
                                red = (redShift < 0) ? red >>> -redShift : red << redShift;
                                int green = pixel & greenMask;
                                green = (greenShift < 0) ? green >>> -greenShift : green << greenShift;
                                int blue = pixel & blueMask;
                                blue = (blueShift < 0) ? blue >>> -blueShift : blue << blueShift;
                                red = determineShading(red, shade.getRed());
                                blue = determineShading(blue, shade.getBlue());
                                green = determineShading(green, shade.getGreen());
                                red = (redShift < 0) ? red << -redShift : red >> redShift;
                                red &= redMask;
                                green = (greenShift < 0) ? green << -greenShift : green >> greenShift;
                                green &= greenMask;
                                blue = (blueShift < 0) ? blue << -blueShift : blue >> blueShift;
                                blue &= blueMask;
                                scanline[x] = red | blue | green;
                        }
                        data.setPixels(0, y, r.width, scanline, 0);
                }
        }
        return data;
}



Knut Radloff/Raleigh/IBM@IBMUS
Sent by: platform-swt-dev-admin@xxxxxxxxxxx

04/29/2004 10:37 AM
Please respond to platform-swt-dev

       
        To:        platform-swt-dev@xxxxxxxxxxx
        cc:        
        Subject:        [platform-swt-dev] Pixel format for ImageData




ImageData.setPixel(s)/getPixel(s) does not spec what format the pixel data is in. E.g., for 24 bpp is it RGB or BGR? I think this is important when an image is loaded using SWT and the application wants to apply transformations to the pixel data.

Should the spec be more specific?


Knut


Back to the top