Changeset 2630
- Timestamp:
- 08/02/08 02:00:56 (5 years ago)
- Location:
- libpipi/trunk/pipi
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
libpipi/trunk/pipi/pipi.h
r2629 r2630 33 33 34 34 PIPI_PIXELS_RGBA32 = 0, 35 PIPI_PIXELS_RGBA_F = 1, 35 PIPI_PIXELS_BGR24 = 1, 36 PIPI_PIXELS_RGBA_F = 2, 36 37 37 PIPI_PIXELS_MAX = 238 PIPI_PIXELS_MAX = 3 38 39 } 39 40 pipi_format_t; -
libpipi/trunk/pipi/pixels.c
r2620 r2630 57 57 bytes = img->w * img->h * 4 * sizeof(uint8_t); 58 58 break; 59 case PIPI_PIXELS_BGR24: 60 bytes = img->w * img->h * 3 * sizeof(uint8_t); 61 break; 59 62 case PIPI_PIXELS_RGBA_F: 60 63 bytes = img->w * img->h * 4 * sizeof(float); … … 82 85 = u8tof32(src[4 * (y * img->w + x) + i]); 83 86 } 87 else if(img->last_modified == PIPI_PIXELS_BGR24 88 && type == PIPI_PIXELS_RGBA_F) 89 { 90 uint8_t *src = (uint8_t *)img->p[PIPI_PIXELS_BGR24].pixels; 91 float *dest = (float *)img->p[type].pixels; 92 93 init_tables(); 94 95 for(y = 0; y < img->h; y++) 96 for(x = 0; x < img->w; x++) 97 { 98 dest[4 * (y * img->w + x)] 99 = u8tof32(src[3 * (y * img->w + x) + 2]); 100 dest[4 * (y * img->w + x) + 1] 101 = u8tof32(src[3 * (y * img->w + x) + 1]); 102 dest[4 * (y * img->w + x) + 2] 103 = u8tof32(src[3 * (y * img->w + x)]); 104 dest[4 * (y * img->w + x) + 3] = 1.0; 105 } 106 } 84 107 else if(img->last_modified == PIPI_PIXELS_RGBA_F 85 108 && type == PIPI_PIXELS_RGBA32) … … 118 141 } 119 142 } 143 else if(img->last_modified == PIPI_PIXELS_RGBA_F 144 && type == PIPI_PIXELS_BGR24) 145 { 146 float *src = (float *)img->p[PIPI_PIXELS_RGBA_F].pixels; 147 uint8_t *dest = (uint8_t *)img->p[type].pixels; 148 149 init_tables(); 150 151 for(y = 0; y < img->h; y++) 152 for(x = 0; x < img->w; x++) 153 for(i = 0; i < 3; i++) 154 { 155 double p, e; 156 uint8_t d; 157 158 p = src[4 * (y * img->w + x) + i]; 159 160 if(p < 0.) d = 0.; 161 else if(p > 1.) d = 255; 162 else d = (int)(255.999 * pow(p, 1. / GAMMA)); 163 164 dest[3 * (y * img->w + x) + i] = d; 165 166 e = p - u8tof32(d); 167 if(x < img->w - 1) 168 src[4 * (y * img->w + x + 1) + i] += e * .4375; 169 if(y < img->h - 1) 170 { 171 if(x < img->w - 1) 172 src[4 * ((y + 1) * img->w + x - 1) + i] += e * .1875; 173 src[4 * ((y + 1) * img->w + x) + i] += e * .3125; 174 if(x < img->w - 1) 175 src[4 * ((y + 1) * img->w + x + 1) + i] += e * .0625; 176 } 177 } 178 } 120 179 else 121 180 {
Note: See TracChangeset
for help on using the changeset viewer.
