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

📄 device.h

📁 下载来的一个看图软件的源代码
💻 H
字号:
/* libwmf ("ipa/xgd/device.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.  *//* This is called by wmf_play() the *first* time the meta file is played */static void wmf_gd_device_open (wmfAPI* API){	wmf_gd_t* ddata = WMF_GD_GetData (API);	/* gd_t* gd = (gd_t*) ddata->gd_data; */	WMF_DEBUG (API,"wmf_[gd_]device_open");#ifndef HAVE_LIBPNG	if (ddata->type == wmf_gd_png)	{	WMF_ERROR (API,"Sorry! libwmf[gd] does not have PNG support!");		API->err = wmf_E_DeviceError;		return;	}#endif /* HAVE_LIBPNG */#ifndef HAVE_LIBJPEG	if (ddata->type == wmf_gd_jpeg)	{	WMF_ERROR (API,"Sorry! libwmf[gd] does not have JPEG support!");		API->err = wmf_E_DeviceError;		return;	}#endif /* HAVE_LIBJPEG */}/* This is called by wmf_api_destroy() */static void wmf_gd_device_close (wmfAPI* API){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	WMF_DEBUG (API,"wmf_[gd_]device_close");	if (gd->brush.hatch) gdImageDestroy (gd->brush.hatch);	if (gd->brush.image) gdImageDestroy (gd->brush.image);	if (gd->pen.image) gdImageDestroy (gd->pen.image);	if (gd->image) gdImageDestroy (gd->image);}/* This is called from the beginning of each play for initial page setup */static void wmf_gd_device_begin (wmfAPI* API){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	WMF_DEBUG (API,"wmf_[gd_]device_begin");	if ((ddata->width == 0) || (ddata->height == 0))	{	WMF_ERROR (API,"Image has bad size!");		API->err = wmf_E_Glitch;		return;	}	gd->image = gdImageCreateTrueColor ((int) ddata->width,(int) ddata->height);	if (gd->image == 0)	{	WMF_ERROR (API,"Unable to create image!");		API->err = wmf_E_DeviceError;		return;	}	gd->brush.hatch = 0;	gd->brush.image = 0;	gd->pen.image = 0;	gd->white = gdImageColorAllocate (gd->image,255,255,255); /* background color */	gdImageFilledRectangle (gd->image,0,0,(int) ddata->width - 1,(int) ddata->height - 1,gd->white);}/* This is called from the end of each play for page termination */static void wmf_gd_device_end (wmfAPI* API){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	gdSink sink;	WMF_DEBUG (API,"wmf_[gd_]device_end");	switch (ddata->type)	{#ifdef HAVE_LIBPNG	case (wmf_gd_png):		if (ddata->flags & WMF_GD_OUTPUT_FILE)		{	if (ddata->file == 0)			{	WMF_ERROR (API,"Attempt to write to null stream!");				API->err = wmf_E_BadFile;				break;			}			gdImagePng (gd->image,ddata->file);		}		else if (ddata->flags & WMF_GD_OUTPUT_MEMORY)		{	sink.context = (void*) API;			sink.sink = gd_sink;			gd->buffer = 0;			gdImagePngToSink (gd->image,&sink);			if (ERR (API))			{	WMF_ERROR (API,"PNG Write failed!");				break;			}			ddata->memory = gd->buffer;		}	break;#endif#ifdef HAVE_LIBJPEG	case (wmf_gd_jpeg):		if (ddata->flags & WMF_GD_OUTPUT_FILE)		{	if (ddata->file == 0)			{	WMF_ERROR (API,"Attempt to write to null stream!");				API->err = wmf_E_BadFile;				break;			}			gdImageJpeg (gd->image,ddata->file,-1); /* Default quality. */		}		else if (ddata->flags & WMF_GD_OUTPUT_MEMORY)		{	WMF_ERROR (API,"JPEG Output to memory not supported!"); /* Or is it ?? */			API->err = wmf_E_Glitch;		}	break;#endif	case (wmf_gd_image): /* no output, but don't destroy image (see below) */	break;	default:		WMF_ERROR (API,"Output format is not supported!");		API->err = wmf_E_Glitch;	break;	}	if (gd->brush.hatch) gdImageDestroy (gd->brush.hatch);	if (gd->brush.image) gdImageDestroy (gd->brush.image);	if (gd->pen.image) gdImageDestroy (gd->pen.image);	if (ddata->type == wmf_gd_image)	{	gdClipSetReset (gd->image); /* Remove any clipping rectangles */		ddata->gd_image = (void*) gd->image;	}	else	{	gdImageDestroy (gd->image);	}	gd->brush.hatch = 0;	gd->brush.image = 0;	gd->pen.image = 0;	gd->image = 0;}static int gd_sink (void* context,const char* buffer,int length){	wmfAPI* API = (wmfAPI*) context;	wmf_gd_t* ddata = WMF_GD_GetData (API);	gd_t* gd = (gd_t*) ddata->gd_data;	int i;	char* more = 0;	if ((ddata->flags & WMF_GD_OWN_BUFFER) && ddata->sink.function)	{	return (ddata->sink.function (ddata->sink.context,(char*) buffer,length));	}	if (ERR (API)) return (0);	if (length <= 0) return (length);	if (gd->buffer == 0)	{	gd->buffer = (char*) wmf_malloc (API,4096);		if (ERR (API))		{	gd->buffer = 0;			return (0);		}		gd->max_length = 4096;		gd->length = 0;	}	while ((gd->length + (long) length) > gd->max_length)	{	more = (char*) wmf_realloc (API,gd->buffer,gd->max_length + 4096);		if (ERR (API)) break;		gd->buffer = more;		gd->max_length += 4096;	}	if (ERR (API)) return (0);	gd->ptr = gd->buffer + gd->length;	for (i = 0; i < length; i++)	{	(*(gd->ptr)) = (char) buffer[i];		gd->ptr++;		gd->length++;	}	return (length);}static gdPoint gd_translate (wmfAPI* API,wmfD_Coord d_pt){	return (gd_translate_ft64 (API,d_pt,0));}static gdPoint gd_translate_ft64 (wmfAPI* API,wmfD_Coord d_pt,FT_Vector* pen){	wmf_gd_t* ddata = WMF_GD_GetData (API);	gdPoint g_pt;	double x;	double y;	x = ((double) d_pt.x - (double) ddata->bbox.TL.x);	x /= ((double) ddata->bbox.BR.x - (double) ddata->bbox.TL.x);	x *= (double) ddata->width;	y = ((double) d_pt.y - (double) ddata->bbox.TL.y);	y /= ((double) ddata->bbox.BR.y - (double) ddata->bbox.TL.y);	y *= (double) ddata->height;	g_pt.x = (int) floor (x);	g_pt.y = (int) floor (y);	if (pen)	{	pen->x = floor ((x - floor (x)) * 64);		pen->y = floor ((y - floor (y)) * 64);	}	return (g_pt);}static float gd_width (wmfAPI* API,float wmf_width){	wmf_gd_t* ddata = WMF_GD_GetData (API);	double width;	width = (double) wmf_width * (double) ddata->width;	width /= ((double) ddata->bbox.BR.x - (double) ddata->bbox.TL.x);	return ((float) width);}static float gd_height (wmfAPI* API,float wmf_height){	wmf_gd_t* ddata = WMF_GD_GetData (API);	double height;	height = (double) wmf_height * (double) ddata->height;	height /= ((double) ddata->bbox.BR.y - (double) ddata->bbox.TL.y);	return ((float) height);}

⌨️ 快捷键说明

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