Browse Source

* getpixel/setpixel functions use doubles instead of ints for now.

git-svn-id: file:///srv/caca.zoy.org/var/lib/svn/libpipi/trunk@2260 92316355-f0b4-4df1-b90c-862c8a59935f
remotes/tiles
sam 17 years ago
parent
commit
d8aa3a24c3
3 changed files with 17 additions and 18 deletions
  1. +3
    -2
      pipi/pipi.h
  2. +6
    -8
      pipi/pixels.c
  3. +8
    -8
      pipi/resize.c

+ 3
- 2
pipi/pipi.h View File

@@ -34,8 +34,9 @@ extern void pipi_save(pipi_image_t *img, const char *name);


extern int pipi_getgray(pipi_image_t const *img, int x, int y, int *g); extern int pipi_getgray(pipi_image_t const *img, int x, int y, int *g);
extern int pipi_getpixel(pipi_image_t const *img, extern int pipi_getpixel(pipi_image_t const *img,
int x, int y, int *r, int *g, int *b);
extern int pipi_setpixel(pipi_image_t *img, int x, int y, int r, int g, int b);
int x, int y, double *r, double *g, double *b);
extern int pipi_setpixel(pipi_image_t *img, int x, int y,
double r, double g, double b);


extern pipi_image_t *pipi_resize(pipi_image_t const *, int, int); extern pipi_image_t *pipi_resize(pipi_image_t const *, int, int);




+ 6
- 8
pipi/pixels.c View File

@@ -25,11 +25,11 @@


#include <math.h> #include <math.h>


#include "pipi_internals.h"
#include "pipi.h" #include "pipi.h"
#include "pipi_internals.h"


#define C2I(p) ((int)255.999*pow(((double)p)/255., 2.2))
#define I2C(p) ((int)255.999*pow(((double)p)/255., 1./2.2))
#define C2I(p) (pow(((double)p)/255., 2.2))
#define I2C(p) ((int)255.999*pow(((double)p), 1./2.2))


int pipi_getgray(pipi_image_t const *img, int x, int y, int *g) int pipi_getgray(pipi_image_t const *img, int x, int y, int *g)
{ {
@@ -45,15 +45,13 @@ int pipi_getgray(pipi_image_t const *img, int x, int y, int *g)
} }


int pipi_getpixel(pipi_image_t const *img, int pipi_getpixel(pipi_image_t const *img,
int x, int y, int *r, int *g, int *b)
int x, int y, double *r, double *g, double *b)
{ {
uint8_t *pixel; uint8_t *pixel;


if(x < 0 || y < 0 || x >= img->width || y >= img->height) if(x < 0 || y < 0 || x >= img->width || y >= img->height)
{ {
*r = 255;
*g = 255;
*b = 255;
*r = *g = *b = 1.;
return -1; return -1;
} }


@@ -66,7 +64,7 @@ int pipi_getpixel(pipi_image_t const *img,
return 0; return 0;
} }


int pipi_setpixel(pipi_image_t *img, int x, int y, int r, int g, int b)
int pipi_setpixel(pipi_image_t *img, int x, int y, double r, double g, double b)
{ {
uint8_t *pixel; uint8_t *pixel;




+ 8
- 8
pipi/resize.c View File

@@ -22,12 +22,12 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>


#include "pipi_internals.h"
#include "pipi.h" #include "pipi.h"
#include "pipi_internals.h"


pipi_image_t *pipi_resize(pipi_image_t const *src, int w, int h) pipi_image_t *pipi_resize(pipi_image_t const *src, int w, int h)
{ {
int *aline, *line;
double *aline, *line;
pipi_image_t *dst; pipi_image_t *dst;
int x, y, x0, y0, sw, dw, sh, dh, remy; int x, y, x0, y0, sw, dw, sh, dh, remy;


@@ -36,28 +36,28 @@ pipi_image_t *pipi_resize(pipi_image_t const *src, int w, int h)
sw = src->width; sh = src->height; sw = src->width; sh = src->height;
dw = dst->width; dh = dst->height; dw = dst->width; dh = dst->height;


aline = malloc(3 * dw * sizeof(int));
line = malloc(3 * dw * sizeof(int));
aline = malloc(3 * dw * sizeof(double));
line = malloc(3 * dw * sizeof(double));


memset(line, 0, 3 * dw * sizeof(int));
memset(line, 0, 3 * dw * sizeof(double));
remy = 0; remy = 0;


for(y = 0, y0 = 0; y < dst->height; y++) for(y = 0, y0 = 0; y < dst->height; y++)
{ {
int toty = 0, ny; int toty = 0, ny;


memset(aline, 0, 3 * dw * sizeof(int));
memset(aline, 0, 3 * dw * sizeof(double));


while(toty < sh) while(toty < sh)
{ {
if(remy == 0) if(remy == 0)
{ {
int r = 0, g = 0, b = 0;
double r = 0, g = 0, b = 0;
int remx = 0; int remx = 0;


for(x = 0, x0 = 0; x < dst->width; x++) for(x = 0, x0 = 0; x < dst->width; x++)
{ {
int ar = 0, ag = 0, ab = 0;
double ar = 0, ag = 0, ab = 0;
int totx = 0, nx; int totx = 0, nx;


while(totx < sw) while(totx < sw)


Loading…
Cancel
Save