tkImgUtil.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
- /*
- * tkImgUtil.c --
- *
- * This file contains image related utility functions.
- *
- * Copyright (c) 1995 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: tkImgUtil.c,v 1.2 1998/09/14 18:23:13 stanton Exp $
- */
- #include "tkInt.h"
- #include "tkPort.h"
- #include "xbytes.h"
- /*
- *----------------------------------------------------------------------
- *
- * TkAlignImageData --
- *
- * This function takes an image and copies the data into an
- * aligned buffer, performing any necessary bit swapping.
- *
- * Results:
- * Returns a newly allocated buffer that should be freed by the
- * caller.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
- char *
- TkAlignImageData(image, alignment, bitOrder)
- XImage *image; /* Image to be aligned. */
- int alignment; /* Number of bytes to which the data should
- * be aligned (e.g. 2 or 4) */
- int bitOrder; /* Desired bit order: LSBFirst or MSBFirst. */
- {
- long dataWidth;
- char *data, *srcPtr, *destPtr;
- int i, j;
- if (image->bits_per_pixel != 1) {
- panic("TkAlignImageData: Can't handle image depths greater than 1.");
- }
- /*
- * Compute line width for output data buffer.
- */
- dataWidth = image->bytes_per_line;
- if (dataWidth % alignment) {
- dataWidth += (alignment - (dataWidth % alignment));
- }
- data = ckalloc(dataWidth * image->height);
- destPtr = data;
- for (i = 0; i < image->height; i++) {
- srcPtr = &image->data[i * image->bytes_per_line];
- for (j = 0; j < dataWidth; j++) {
- if (j >= image->bytes_per_line) {
- *destPtr = 0;
- } else if (image->bitmap_bit_order != bitOrder) {
- *destPtr = xBitReverseTable[(unsigned char)(*(srcPtr++))];
- } else {
- *destPtr = *(srcPtr++);
- }
- destPtr++;
- }
- }
- return data;
- }