Changeset 3138 for libcaca


Ignore:
Timestamp:
Oct 29, 2008, 6:09:05 PM (11 years ago)
Author:
nico
Message:
  • Add indexed colors image support for dither with gd resources
Location:
libcaca/trunk/caca-php
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca-php/examples/dithering.php

    r3135 r3138  
    11#!/usr/bin/php5
    22<?php
    3 
    43$img = imagecreatefrompng(dirname(__FILE__)."/logo-caca.png");
     4//$img = imagecreatefromgif(dirname(__FILE__)."/logo-caca-idx.gif");
    55if (!$img)
    66        die("Can not open image.\n");
     
    1515        die("Can not create display.\n");
    1616
     17//caca_set_dither_palette_gd($dither, $img);
    1718caca_dither_bitmap_gd($canvas, 0, 0, caca_get_canvas_width($canvas), caca_get_canvas_height($canvas), $dither, $img);
    1819caca_refresh_display($display);
  • libcaca/trunk/caca-php/php_caca.c

    r3137 r3138  
    8989        PHP_FE(caca_create_dither_gd, NULL)
    9090        PHP_FE(caca_set_dither_palette, NULL)
     91        PHP_FE(caca_set_dither_palette_gd, NULL)
    9192        PHP_FE(caca_set_dither_brightness, NULL)
    9293        PHP_FE(caca_get_dither_brightness, NULL)
     
    363364
    364365void *gd_get_pixels(gdImage *img) {
    365         if (!img->trueColor)
    366                 return NULL;
    367 
    368         int line_size = img->sx * sizeof(int);
    369         void *result = malloc(img->sy * line_size);
    370         int j;         
    371         for (j = 0; j < img->sy; j++)
    372                 memcpy(result + (j * line_size), (const void *) img->tpixels[j], line_size);
    373         return result;
     366        if (img->trueColor)  {
     367                int line_size = img->sx * sizeof(int);
     368                void *result = malloc(img->sy * line_size);
     369                int j;         
     370                for (j = 0; j < img->sy; j++)
     371                        memcpy(result + (j * line_size), (const void *) img->tpixels[j], line_size);
     372                return result;
     373        }
     374        else {
     375                int line_size = img->sx * sizeof(char);
     376                void *result = malloc(img->sy * line_size);
     377                int j;         
     378                for (j = 0; j < img->sy; j++)
     379                        memcpy(result + (j * line_size), (const void *) img->pixels[j], line_size);
     380                return result;
     381        }
    374382}
    375383
     
    10201028
    10211029        gdImage *img = fetch_external_resource(_zval, "gd");
    1022         if (!img | !img->trueColor) {
    1023                 RETURN_FALSE;
    1024         }
    1025         caca_dither_t *dither = caca_create_dither(sizeof(int) * 8, img->sx, img->sy, img->sx * sizeof(int), 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000);
     1030        if (!img) {
     1031                RETURN_FALSE;
     1032        }
     1033
     1034        caca_dither_t *dither;
     1035        if (img->trueColor)
     1036                dither = caca_create_dither(sizeof(int) * 8, img->sx, img->sy, img->sx * sizeof(int), 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000);
     1037        else
     1038                dither = caca_create_dither(sizeof(char) * 8, img->sx, img->sy, img->sx * sizeof(char), 0, 0, 0, 0);
     1039
    10261040        ZEND_REGISTER_RESOURCE(return_value, dither, le_caca_dither);
    10271041}
     
    10511065                }
    10521066        }
    1053         RETURN_SUCCESS(caca_set_dither_palette(dither, &tbl[0][0], &tbl[1][0], &tbl[2][0], &tbl[3][0]));
     1067        RETURN_SUCCESS(caca_set_dither_palette(dither, tbl[0], tbl[1], tbl[2], tbl[3]));
     1068}
     1069
     1070PHP_FUNCTION(caca_set_dither_palette_gd) {
     1071        zval *_zval1, *_zval2;
     1072        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &_zval1, &_zval2) == FAILURE) {
     1073                RETURN_FALSE;
     1074        }
     1075
     1076        caca_dither_t *dither;
     1077        ZEND_FETCH_RESOURCE(dither, caca_dither_t*, &_zval1, -1, PHP_CACA_CANVAS_RES_NAME, le_caca_dither);
     1078
     1079        gdImage *img = fetch_external_resource(_zval2, "gd");
     1080        if (!img | img->trueColor | gdMaxColors != 256) {
     1081                RETURN_FALSE;
     1082        }
     1083
     1084        uint32_t r[256], g[256], b[256], a[256];
     1085        int i;
     1086        for (i = 0; i < 256; i++) {
     1087                r[i] = img->red[i] << 4;
     1088                g[i] = img->green[i] << 4;
     1089                b[i] = img->blue[i] << 4;
     1090                a[i] = img->alpha[i] << 4;
     1091        }
     1092
     1093        RETURN_SUCCESS(caca_set_dither_palette(dither, &r[0], &g[0], &b[0], &a[0]));
    10541094}
    10551095
  • libcaca/trunk/caca-php/php_caca.h

    r3129 r3138  
    106106PHP_FUNCTION(caca_create_dither_gd);
    107107PHP_FUNCTION(caca_set_dither_palette);
     108PHP_FUNCTION(caca_set_dither_palette_gd);
    108109PHP_FUNCTION(caca_set_dither_brightness);
    109110PHP_FUNCTION(caca_get_dither_brightness);
Note: See TracChangeset for help on using the changeset viewer.