⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp.h

📁 下载来的一个看图软件的源代码
💻 H
字号:
/* libwmf ("ipa/xgd/bmp.h"): library for wmf conversion   Copyright (C) 2000 - various; see CREDITS, ChangeLog, and sources   The libwmf Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The libwmf Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the libwmf Library; see the file COPYING.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  */static void wmf_gd_rop_draw (wmfAPI* API,wmfROP_Draw_t* rop_draw){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	gdPoint TL;	gdPoint BR;	int brushstyle;	WMF_DEBUG (API,"wmf_[gd_]rop_draw");	if (!TO_FILL (rop_draw)) return;	brushstyle = setbrushstyle (API,rop_draw->dc);	switch (rop_draw->ROP) /* Ternary raster operations */	{	case SRCCOPY: /* dest = source */	break;	case SRCPAINT: /* dest = source OR dest */	break;	case SRCAND: /* dest = source AND dest */	break;	case SRCINVERT: /* dest = source XOR dest */	break;	case SRCERASE: /* dest = source AND (NOT dest) */	break;	case NOTSRCCOPY: /* dest = (NOT source) */	break;	case NOTSRCERASE: /* dest = (NOT src) AND (NOT dest) */	break;	case MERGECOPY: /* dest = (source AND pattern) */	break;	case MERGEPAINT: /* dest = (NOT source) OR dest */	break;	case PATCOPY: /* dest = pattern */	break;	case PATPAINT: /* dest = DPSnoo */	break;	case PATINVERT: /* dest = pattern XOR dest */	break;	case DSTINVERT: /* dest = (NOT dest) */	break;	case BLACKNESS: /* dest = BLACK */		brushstyle = gdImageColorResolve (gd->image,0,0,0);	break;	case WHITENESS: /* dest = WHITE */		brushstyle = gdImageColorResolve (gd->image,255,255,255);	break;	default:	break;	}	TL = gd_translate (API,rop_draw->TL);	BR = gd_translate (API,rop_draw->BR);	gdImageFilledRectangle (gd->image,TL.x,TL.y,BR.x,BR.y,brushstyle);}static void wmf_gd_bmp_draw (wmfAPI* API,wmfBMP_Draw_t* bmp_draw){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	wmfRGB bg;	wmfRGB rgb;	int opacity;	float bmp_width;	float bmp_height;	float x;	float y;	unsigned int i;	unsigned int j;	unsigned int width;	unsigned int height;	int alpha;	int color;	unsigned long tfg;	unsigned long tbg;	gdPoint pt;	WMF_DEBUG (API,"wmf_[gd_]bmp_draw");	pt = gd_translate (API,bmp_draw->pt);	bmp_width  = gd_width  (API,(float) ((double) bmp_draw->crop.w * bmp_draw->pixel_width ));	bmp_height = gd_height (API,(float) ((double) bmp_draw->crop.h * bmp_draw->pixel_height));	width  = (unsigned int) ceil (1.0 + bmp_width ); /* The 1.0 is a bit of a fudge factor... */	height = (unsigned int) ceil (1.0 + bmp_height); /* Works with test11.wmf, anyway.   [??] */	for (j = 0; j < height; j++)	{	y = (float) ((double) j * (double) (bmp_draw->crop.h - 1) / (double) (height - 1));		y += (float) bmp_draw->crop.y;		for (i = 0; i < width; i++)		{	x = (float) ((double) i * (double) (bmp_draw->crop.w - 1) / (double) (width - 1));			x += (float) bmp_draw->crop.x;			opacity = wmf_ipa_bmp_interpolate (API,&(bmp_draw->bmp),&rgb,x,y);			if (opacity < 0) break;			if (opacity == 0) continue;			if (opacity < 0xff)			{	color = gdImageGetPixel (gd->image,i+pt.x,(height-1-j)+pt.y);				alpha = gdImageAlpha (gd->image, color);				alpha = (((0x7f - alpha) + 1) << 1) - 1;				bg.r = (unsigned char) (gdImageRed   (gd->image, color) & 0xff);				bg.g = (unsigned char) (gdImageGreen (gd->image, color) & 0xff);				bg.b = (unsigned char) (gdImageBlue  (gd->image, color) & 0xff);				/* not sure if this is correct, but...				 */				tfg = (1 + (unsigned long) opacity)				    * (1 + (unsigned long) rgb.r);				tbg = (1 + (unsigned long) (0xff - opacity))				    * (1 + (unsigned long) bg.r);				rgb.r = (unsigned char) ((((tfg + tbg) >> 8) - 1) & 0xff);				tfg = (1 + (unsigned long) opacity)				    * (1 + (unsigned long) rgb.g);				tbg = (1 + (unsigned long) (0xff - opacity))				    * (1 + (unsigned long) bg.g);				rgb.g = (unsigned char) ((((tfg + tbg) >> 8) - 1) & 0xff);				tfg = (1 + (unsigned long) opacity)				    * (1 + (unsigned long) rgb.b);				tbg = (1 + (unsigned long) (0xff - opacity))				    * (1 + (unsigned long) bg.b);				rgb.b = (unsigned char) ((((tfg + tbg) >> 8) - 1) & 0xff);				tbg = (unsigned long) opacity;				tbg *= 0x100 - (unsigned long) alpha;				tbg = ((tbg - 1) >> 8) + (unsigned long) alpha;				alpha = (int) (tbg & 0xff);				alpha = 0x7f - (((alpha + 1) >> 1) - 1);			}			else			{	alpha = 0x7f - (((opacity + 1) >> 1) - 1);			}			color = gdImageColorResolveAlpha (gd->image,rgb.r,rgb.g,rgb.b,alpha);			gdImageSetPixel (gd->image,i+pt.x,(height-1-j)+pt.y,color);		}	}}static void wmf_gd_bmp_read (wmfAPI* API,wmfBMP_Read_t* bmp_read){	WMF_DEBUG (API,"wmf_[gd_]bmp_read");	wmf_ipa_bmp_read (API,bmp_read);}static void wmf_gd_bmp_free (wmfAPI* API,wmfBMP* bmp){	WMF_DEBUG (API,"wmf_[gd_]bmp_free");	wmf_ipa_bmp_free (API,bmp);}

⌨️ 快捷键说明

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