欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

image.c

CS架构的多平台的GUI系统
C
字号:
/***************************************************************************    begin                : Thu Jun 3 2004    copyright            : (C) 2004 - 2005 by Alper Akcan    email                : distchx@yahoo.com ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU Lesser General Public License as        * *   published by the Free Software Foundation; either version 2.1 of the  * *   License, or (at your option) any later version.                       * *                                                                         * ***************************************************************************/#include "xynth_.h"int s_image_hex2int (char *str){    int i = 0;    int r = 0;    for (i = 0; i < 2; i++) {	switch (str[i]) {	    case '1':	r += 1;		break;	    case '2':	r += 2;		break;	    case '3':	r += 3;		break;	    case '4':	r += 4;		break;	    case '5':	r += 5;		break;	    case '6':	r += 6;		break;	    case '7':	r += 7;		break;	    case '8':	r += 8;		break;	    case '9':	r += 9;		break;	    case 'a':	    case 'A':	r += 10;	break;	    case 'b':	    case 'B':	r += 11;	break;	    case 'c':	    case 'C':	r += 12;	break;	    case 'd':	    case 'D':	r += 13;	break;	    case 'e':	    case 'E':	r += 14;	break;	    case 'f':	    case 'F':	r += 15;	break;	}	if (!i) {	    r *= 16;	}    }    return r;}int s_image_get_mat (s_image_t *img){        int i;        unsigned int *d;        unsigned char *m;        if (img->mat != NULL) {		s_image_free_mat(img);	}	        d = img->rgba;        i = img->w * img->h;        	img->mat = (unsigned char *) s_calloc(i, sizeof(char));	m = img->mat;	while (i--) {		*m++ = (~*d++ & 0xFF);	}	return 0;}int s_image_get_buf (s_surface_t *surface, s_image_t *img){        int x;        int y;        s_surface_t s;        unsigned int *d = img->rgba;        if (img->buf != NULL) {		s_image_free_buf(img);	}        img->buf = (char *) s_malloc(img->w * img->h * surface->bytesperpixel + 1);	s_getsurfacevirtual(&s, img->w, img->h, surface->bitsperpixel, img->buf);	for (y = 0; y < img->h; y++) {		for (x = 0; x < img->w; x++) {			if (~*d & 0xFF) {				s_setpixelrgb(&s, x, y, (*d >> 24) & 0xFF, (*d >> 16) & 0xFF, (*d >> 8) & 0xFF);			}			d++;		}	}	return 0;}void s_image_get_handler (s_image_t *img){	int i;	int j;	int x;	int y;	unsigned int *rgba_tmp;	j = 1;	i = img->w;	rgba_tmp = img->rgba;	for (y = 0; y < img->h; y++) {		for (x = 0; x < img->w; x++) {			if (j && (~*rgba_tmp & 0xFF)) {				img->handler.y = y;				j = 0;			}			if (~*rgba_tmp & 0xFF) {				if (x < i) {					i = x;				}			}			rgba_tmp++;		}	}	img->handler.x = i;        j = 1;        i = img->w;	rgba_tmp = img->rgba + (img->h * img->w - 1);	for (y = 0; y < img->h; y++) {		for (x = 0; x < img->w; x++) {			if (j && (~*rgba_tmp & 0xFF)) {				img->handler.h = (img->h - y) - img->handler.y;				j = 0;			}			if (~*rgba_tmp & 0xFF) {				if (x < i) {					i = x;				}			}			rgba_tmp--;		}	}	img->handler.w = (img->w - i) - img->handler.x;}int s_image_init (s_image_t **img){	(*img) = (s_image_t *) s_calloc(1, sizeof(s_image_t));	s_image_layers_init(*img);	return 0;}void s_image_free_buf (s_image_t *img){	s_free(img->buf);	img->buf = NULL;}void s_image_free_mat (s_image_t *img){	s_free(img->mat);	img->mat = NULL;}void s_image_free_rgba (s_image_t *img){	s_free(img->rgba);	img->rgba = NULL;}int s_image_uninit (s_image_t *img){        s_image_free_buf(img);        s_image_free_mat(img);        s_image_free_rgba(img);	s_image_layers_uninit(img);	s_free(img);	img = NULL;	return 0;}int s_image_layer_init (s_image_t **lyr){	return s_image_init(lyr);}int s_image_layer_uninit (s_image_t *lyr){	return s_image_uninit(lyr);}int s_image_layers_init (s_image_t *img){	img->layers = (s_list_t *) s_calloc(1, sizeof(s_list_t));	return s_list_init(img->layers);}int s_image_layers_uninit (s_image_t *img){	s_image_t *img_;	while (!s_list_eol(img->layers, 0)) {		img_ = (s_image_t *) s_list_get(img->layers, 0);		s_list_remove(img->layers, 0);		s_image_layer_uninit(img_);	}	s_free(img->layers);	img->layers = NULL;	return 0;}int s_image_img (char *file, s_image_t *img){	if (!s_image_png_is(file)) {		return s_image_png(file, img);	} else if (!s_image_xpm_is(file)) {		return s_image_xpm(file, img);	} else if (!s_image_gif_is(file)) {		return s_image_gif(file, img);	} else {		debugf(DFAT, "Unknown image format (%s)", file);	}	return -1;}

⌨️ 快捷键说明

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