tkimgutil.c

来自「linux系统下的音频通信」· C语言 代码 · 共 79 行

C
79
字号
/*  * 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. * * SCCS: @(#) tkImgUtil.c 1.3 96/02/15 18:53:12 */#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;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?