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

📄 resize.c

📁 网络摄像头的webserver
💻 C
字号:
#include <stdio.h>#include <libxml/parser.h>#include "config.h"#define MODULE_FILTER#include "module.h"#include "image.h"#include "xmlhelp.h"#include "log.h"#define MODNAME "resize"static struct image *resize_get_dim(struct image *, xmlNodePtr);char *name = MODNAME;char *version = VERSION;intfilter(struct image *img, xmlNodePtr node, void **ctx){	struct image work;	double xratio, yratio;	unsigned int x, y, rx, ry;	unsigned char *r, *rline, *w;		if (!*ctx) {		*ctx = resize_get_dim(img, node);		if (!*ctx)		{			log_log(MODNAME, "Invalid/missing resize parameters\n");			return -1;		}	}	memcpy(&work, *ctx, sizeof(work));	image_new(&work, work.x, work.y);		w = work.buf;	xratio = (double) img->x / work.x;	yratio = (double) img->y / work.y;	for (y = 0; y < work.y; y++)	{		ry = yratio * y;		rline = img->buf + ry * img->x * 3;		for (x = 0; x < work.x; x++)		{			rx = xratio * x;			r = rline + rx * 3;			*w++ = *r++;			*w++ = *r++;			*w++ = *r++;		}	}		image_move(img, &work);	return 0;}staticstruct image *resize_get_dim(struct image *oriimg, xmlNodePtr node){	double scale;	struct image ret;	struct image *retptr;		memcpy(&ret, oriimg, sizeof(ret));		for (node = node->xml_children; node; node = node->next)	{		if (xml_isnode(node, "width"))			ret.x = xml_atoi(node, ret.x);		else if (xml_isnode(node, "height"))			ret.y = xml_atoi(node, ret.y);		else if (xml_isnode(node, "scale"))		{			scale = xml_atof(node, 0);			if (scale <= 0)				continue;			ret.x = (ret.x * scale) / 100;			ret.y = (ret.y * scale) / 100;		}	}		if (ret.x == 0 || ret.y == 0)		return NULL;			retptr = malloc(sizeof(*retptr));	memcpy(retptr, &ret, sizeof(*retptr));		return retptr;}

⌨️ 快捷键说明

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