Bug-Gentoo: https://bugs.gentoo.org/605930 Origin: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=97d6e3e6839898829e8cce211b97a7fa77f5d06e
		
			
				
	
	
		
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* $Id: fb_imlib2.c,v 1.10 2004/08/04 17:32:28 ukai Exp $ */
 | |
| /**************************************************************************
 | |
|                 fb_imlib2.c 0.3 Copyright (C) 2002, hito
 | |
|  **************************************************************************/
 | |
| 
 | |
| #include <Imlib2.h>
 | |
| #include "fb.h"
 | |
| #include "fb_img.h"
 | |
| 
 | |
| static void draw(FB_IMAGE * img, Imlib_Image image);
 | |
| static Imlib_Image resize_image(Imlib_Image image, int width, int height);
 | |
| 
 | |
| void
 | |
| fb_image_init()
 | |
| {
 | |
|     return;
 | |
| }
 | |
| 
 | |
| int
 | |
| get_image_size(char *filename, int *w, int *h)
 | |
| {
 | |
|     Imlib_Image image;
 | |
| 
 | |
|     if (filename == NULL)
 | |
| 	return 1;
 | |
| 
 | |
|     image = imlib_load_image(filename);
 | |
|     if (image == NULL)
 | |
| 	return 1;
 | |
| 
 | |
|     imlib_context_set_image(image);
 | |
|     *w = imlib_image_get_width();
 | |
|     *h = imlib_image_get_height();
 | |
|     imlib_free_image();
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| FB_IMAGE **
 | |
| fb_image_load(char *filename, int w, int h, int n)
 | |
| {
 | |
|     Imlib_Image image;
 | |
|     FB_IMAGE **frame;
 | |
| 
 | |
|     if (filename == NULL)
 | |
| 	return NULL;
 | |
| 
 | |
|     image = imlib_load_image(filename);
 | |
|     if (image == NULL)
 | |
| 	return NULL;
 | |
| 
 | |
|     image = resize_image(image, w, h);
 | |
|     if (image == NULL)
 | |
| 	return NULL;
 | |
| 
 | |
|     imlib_context_set_image(image);
 | |
| 
 | |
|     w = imlib_image_get_width();
 | |
|     h = imlib_image_get_height();
 | |
| 
 | |
|     frame = fb_frame_new(w, h, 1);
 | |
| 
 | |
|     if (frame == NULL) {
 | |
| 	imlib_free_image();
 | |
| 	return NULL;
 | |
|     }
 | |
| 
 | |
|     draw(frame[0], image);
 | |
| 
 | |
|     imlib_free_image();
 | |
| 
 | |
|     return frame;
 | |
| }
 | |
| 
 | |
| static void
 | |
| draw(FB_IMAGE * img, Imlib_Image image)
 | |
| {
 | |
|     int i, j, r, g, b, a = 0, offset;
 | |
|     DATA32 *data;
 | |
| 
 | |
|     if (img == NULL)
 | |
| 	return;
 | |
| 
 | |
|     imlib_context_set_image(image);
 | |
|     data = imlib_image_get_data_for_reading_only();
 | |
| 
 | |
|     for (j = 0; j < img->height; j++) {
 | |
| 	offset = img->width * j;
 | |
| 	for (i = 0; i < img->width; i++) {
 | |
| 	    a = (data[offset + i] >> 24) & 0x000000ff;
 | |
| 	    r = (data[offset + i] >> 16) & 0x000000ff;
 | |
| 	    g = (data[offset + i] >> 8) & 0x000000ff;
 | |
| 	    b = (data[offset + i]) & 0x000000ff;
 | |
| 
 | |
| 	    if (a == 0) {
 | |
| 		fb_image_pset(img, i, j, bg_r, bg_g, bg_b);
 | |
| 	    }
 | |
| 	    else {
 | |
| 		fb_image_pset(img, i, j, r, g, b);
 | |
| 	    }
 | |
| 	}
 | |
|     }
 | |
|     return;
 | |
| }
 | |
| 
 | |
| static Imlib_Image
 | |
| resize_image(Imlib_Image image, int width, int height)
 | |
| {
 | |
|     Imlib_Image resized_image;
 | |
|     int w, h;
 | |
| 
 | |
|     if (image == NULL)
 | |
| 	return NULL;
 | |
| 
 | |
|     imlib_context_set_image(image);
 | |
|     w = imlib_image_get_width();
 | |
|     h = imlib_image_get_height();
 | |
| 
 | |
|     if (width < 1 || height < 1)
 | |
| 	return image;
 | |
| 
 | |
|     if (w == width && h == height)
 | |
| 	return image;
 | |
| 
 | |
|     resized_image =
 | |
| 	imlib_create_cropped_scaled_image(0, 0, w, h, width, height);
 | |
| 
 | |
|     imlib_free_image();
 | |
| 
 | |
|     return resized_image;
 | |
| }
 |