| /******************************************************************************* |
| * Copyright (c) 2000, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| #ifndef __NG_IMAGEDATA_H |
| #define __NG_IMAGEDATA_H |
| |
| /** |
| * Type ng_bitmap_image_t (C version of SWT ImageData) |
| * |
| * Unlike ImageData, ng_bitmap_image_t and all its api are 'internal'. |
| * The api marked 'public' is in the sense that it can be used |
| * by the rest of the native graphic library. |
| */ |
| |
| #include "NgCommon.h" |
| |
| typedef struct ng_bitmap_image_t ng_bitmap_image_t; |
| |
| typedef struct { |
| UBYTE1 blue; |
| UBYTE1 green; |
| UBYTE1 red; |
| } ng_color_map_entry_t; |
| |
| /* ImageData in SWT expects RGB not BGR */ |
| enum { RedOffset=0, GreenOffset=1, BlueOffset=2 }; |
| |
| struct ng_bitmap_image_t { |
| /* Width in bytes of each row */ |
| UBYTE4 row_width; |
| /* Number of bits per pixel (depth) 1, 2, 4, 8, 16 or 24 */ |
| UBYTE4 bit_count; |
| UBYTE4 image_width; |
| UBYTE4 image_height; |
| /* image data |
| * 24-bit images, 3 bytes per pixel representing RGB values |
| * 32 bit images, 4 bytes per pixel representing RGB values + one wasted byte |
| * 16 bit images, 2 bytes per pixel |
| * rest (1, 2, 4, 8): index into color map |
| */ |
| UBYTE1 *image_data; |
| /* alpha data (either NULL or of size image_width*image_height) */ |
| UBYTE1 *alpha_data; |
| /* transparent pixel - default is -1 which means no transparent pixel */ |
| BYTE4 transparent_pixel; |
| /* number of entries in color map */ |
| UBYTE4 color_count; |
| ng_color_map_entry_t *color_map; |
| }; |
| |
| /************************************************ |
| * Public API ng_bitmap_image_t |
| ************************************************/ |
| |
| /** |
| * Init an image |
| */ |
| void NgBitmapImageInit (ng_bitmap_image_t *); |
| |
| /** |
| * Dispose the resources allocated by the image. |
| */ |
| void NgBitmapImageFree (ng_bitmap_image_t *); |
| |
| /** |
| * Access start of image data |
| * return: a pointer to an array of UBYTE1 of size image_row * image_width |
| * signature: UBYTE1 *NgBitmapImageImageData (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageImageData(image) ((image)->image_data) |
| |
| /** |
| * signature: UBYTE4 NgBitmapImageWidth (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageWidth(image) ((image)->image_width) |
| |
| /** |
| * signature: UBYTE4 NgBitmapImageHeight (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageHeight(image) ((image)->image_height) |
| |
| /** |
| * signature: UBYTE4 NgBitmapImageBitCount (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageBitCount(image) ((image)->bit_count) |
| |
| /** |
| * signature: UBYTE4 NgBitmapImageColorCount (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageColorCount(image) ((image)->color_count) |
| |
| /** |
| * Access a row of the image |
| * row: a value which must be between 0 and image_height-1 |
| * return: a pointer to the desired row, which is an array of size row_width |
| * signature: UBYTE1 *NgBitmapImageGetRow (ng_bitmap_image_t *image, UBYTE4 row) |
| */ |
| #define NgBitmapImageGetRow(image, row) (&image->image_data[row * image->row_width]) |
| |
| /** |
| * signature: UBYTE4 NgBitmapImageBytesPerRow (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageBytesPerRow(image) ((image)->row_width) |
| |
| /** |
| * Retrieve an entry from the color map |
| * index: a value which must be between 0 and color_count-1 |
| */ |
| ng_color_map_entry_t *NgBitmapImageColorMap (ng_bitmap_image_t *, UBYTE4 index); |
| |
| /** |
| * Get the value of the transparent pixel |
| * signature: BYTE4 NgBitmapImageGetTransparent (ng_bitmap_image_t *image) |
| */ |
| #define NgBitmapImageGetTransparent(image) ((image)->transparent_pixel) |
| |
| /** |
| * Get the alpha data |
| * signature: UBYTE1 *NgBitmapImageGetAlpha (ng_bitmap_image_t* image) |
| */ |
| #define NgBitmapImageGetAlpha(image) ((image)->alpha_data) |
| |
| void NgBitmapImageBlitDirectToDirect( |
| UBYTE1 *srcData, BYTE4 srcStride, |
| BYTE4 srcWidth, BYTE4 srcHeight, |
| UBYTE1 *destData, BYTE4 destDepth, BYTE4 destStride, BYTE4 destOrder, |
| UBYTE4 destRedMask, UBYTE4 destGreenMask, UBYTE4 destBlueMask); |
| |
| /* Size of hash table used in NgBitmapImageBlitDirectToPalette */ |
| #define RGBIndexTableSize 103 |
| |
| typedef struct { |
| UBYTE1 isSet; |
| UBYTE1 blue; |
| UBYTE1 green; |
| UBYTE1 red; |
| UBYTE1 index; |
| } ng_palette_bucket_t; |
| |
| void NgBitmapImageBlitDirectToPalette( |
| UBYTE1 *srcData, BYTE4 srcStride, |
| BYTE4 srcWidth, BYTE4 srcHeight, |
| UBYTE1 *destData, BYTE4 destDepth, BYTE4 destStride, BYTE4 destOrder, |
| UBYTE1 *destColors, int destNumColors); |
| |
| /************************************************ |
| * Private API ng_bitmap_image_t |
| ************************************************/ |
| |
| /* Number of bytes to round each row to */ |
| #define RowRounding 4 |
| |
| void NgBitmapImageInitialize (ng_bitmap_image_t *); |
| void NgBitmapImageClearData (ng_bitmap_image_t *); |
| |
| void NgBitmapImageSetSize(ng_bitmap_image_t *, |
| UBYTE4 color_count, |
| UBYTE4 bits, |
| UBYTE4 width, |
| UBYTE4 height); |
| |
| #endif /* NG_IMAGEDATA_H */ |