... |
... |
@@ -202,7 +202,7 @@ gblender_reset_key( GBlender blender, |
202
|
202
|
const unsigned char* gamma_ramp_inv = blender->gamma_ramp_inv;
|
203
|
203
|
const unsigned short* gamma_ramp = blender->gamma_ramp;
|
204
|
204
|
|
205
|
|
- unsigned int r1,g1,b1,r2,g2,b2;
|
|
205
|
+ int r1, g1, b1, r2, g2, b2;
|
206
|
206
|
|
207
|
207
|
r1 = ( back >> 16 ) & 255;
|
208
|
208
|
g1 = ( back >> 8 ) & 255;
|
... |
... |
@@ -222,32 +222,35 @@ gblender_reset_key( GBlender blender, |
222
|
222
|
gr += 1;
|
223
|
223
|
#endif
|
224
|
224
|
|
225
|
|
- r1 = gamma_ramp[r1];
|
226
|
|
- g1 = gamma_ramp[g1];
|
227
|
|
- b1 = gamma_ramp[b1];
|
|
225
|
+ r1 = gamma_ramp[r1] << 10;
|
|
226
|
+ g1 = gamma_ramp[g1] << 10;
|
|
227
|
+ b1 = gamma_ramp[b1] << 10;
|
228
|
228
|
|
229
|
|
- r2 = gamma_ramp[r2];
|
230
|
|
- g2 = gamma_ramp[g2];
|
231
|
|
- b2 = gamma_ramp[b2];
|
|
229
|
+ r2 = gamma_ramp[r2] << 10;
|
|
230
|
+ g2 = gamma_ramp[g2] << 10;
|
|
231
|
+ b2 = gamma_ramp[b2] << 10;
|
|
232
|
+
|
|
233
|
+ r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
|
|
234
|
+ g2 = ( g2 - g1 ) / ( GBLENDER_SHADE_COUNT - 1 );
|
|
235
|
+ b2 = ( b2 - b1 ) / ( GBLENDER_SHADE_COUNT - 1 );
|
232
|
236
|
|
233
|
237
|
for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
|
234
|
238
|
{
|
235
|
|
- unsigned int a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
|
236
|
|
- unsigned int r, g, b;
|
|
239
|
+ unsigned char r, g, b;
|
237
|
240
|
|
238
|
241
|
|
239
|
|
- r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
|
240
|
|
- g = ( g2 * a + g1 * ( 255 - a ) + 127 ) / 255;
|
241
|
|
- b = ( b2 * a + b1 * ( 255 - a ) + 127 ) / 255;
|
|
242
|
+ r1 += r2;
|
|
243
|
+ g1 += g2;
|
|
244
|
+ b1 += b2;
|
242
|
245
|
|
243
|
|
- r = gamma_ramp_inv[r];
|
244
|
|
- g = gamma_ramp_inv[g];
|
245
|
|
- b = gamma_ramp_inv[b];
|
|
246
|
+ r = gamma_ramp_inv[r1 >> 10];
|
|
247
|
+ g = gamma_ramp_inv[g1 >> 10];
|
|
248
|
+ b = gamma_ramp_inv[b1 >> 10];
|
246
|
249
|
|
247
|
250
|
#ifdef GBLENDER_STORE_BYTES
|
248
|
|
- gr[0] = (unsigned char)r;
|
249
|
|
- gr[1] = (unsigned char)g;
|
250
|
|
- gr[2] = (unsigned char)b;
|
|
251
|
+ gr[0] = r;
|
|
252
|
+ gr[1] = g;
|
|
253
|
+ gr[2] = b;
|
251
|
254
|
gr += 3;
|
252
|
255
|
#else
|
253
|
256
|
gr[0] = ( r << 16 ) | ( g << 8 ) | b;
|
... |
... |
@@ -315,28 +318,21 @@ gblender_reset_channel_key( GBlender blender, |
315
|
318
|
const unsigned char* gamma_ramp_inv = blender->gamma_ramp_inv;
|
316
|
319
|
const unsigned short* gamma_ramp = blender->gamma_ramp;
|
317
|
320
|
|
318
|
|
- unsigned int r1,r2;
|
319
|
|
-
|
320
|
|
- r1 = back;
|
321
|
|
- r2 = fore;
|
|
321
|
+ int r1, r2;
|
322
|
322
|
|
323
|
|
- gr[0] = (unsigned char)r1;
|
|
323
|
+ gr[0] = (unsigned char)back;
|
324
|
324
|
gr++;
|
325
|
325
|
|
326
|
|
- r1 = gamma_ramp[r1];
|
327
|
|
- r2 = gamma_ramp[r2];
|
|
326
|
+ r1 = gamma_ramp[back] << 10;
|
|
327
|
+ r2 = gamma_ramp[fore] << 10;
|
|
328
|
+
|
|
329
|
+ r2 = ( r2 - r1 ) / ( GBLENDER_SHADE_COUNT - 1 );
|
328
|
330
|
|
329
|
331
|
for ( nn = 1; nn < GBLENDER_SHADE_COUNT; nn++ )
|
330
|
332
|
{
|
331
|
|
- unsigned int a = 255 * nn / ( GBLENDER_SHADE_COUNT - 1 );
|
332
|
|
- unsigned int r;
|
333
|
|
-
|
334
|
|
-
|
335
|
|
- r = ( r2 * a + r1 * ( 255 - a ) + 127 ) / 255;
|
336
|
|
-
|
337
|
|
- r = gamma_ramp_inv[r];
|
|
333
|
+ r1 += r2;
|
338
|
334
|
|
339
|
|
- gr[0] = (unsigned char)r;
|
|
335
|
+ gr[0] = gamma_ramp_inv[r1 >> 10];
|
340
|
336
|
gr++;
|
341
|
337
|
}
|
342
|
338
|
}
|