Subversion Repositories gelsvn

Rev

Rev 369 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 369 Rev 373
Line 320... Line 320...
320
	unsigned char *img = image;
320
	unsigned char *img = image;
321
	int i, j;
321
	int i, j;
322
	for( i = width * height; i > 0; --i )
322
	for( i = width * height; i > 0; --i )
323
	{
323
	{
324
		/* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
324
		/* float scale = powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
325
		float scale = ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
325
		float scale = (float)ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
326
		for( j = 0; j < 3; ++j )
326
		for( j = 0; j < 3; ++j )
327
		{
327
		{
328
			if( img[j] * scale > max_val )
328
			if( img[j] * scale > max_val )
329
			{
329
			{
330
				max_val = img[j] * scale;
330
				max_val = img[j] * scale;
Line 361... Line 361...
361
	for( i = width * height; i > 0; --i )
361
	for( i = width * height; i > 0; --i )
362
	{
362
	{
363
		/* decode this pixel, and find the max */
363
		/* decode this pixel, and find the max */
364
		float r,g,b,e, m;
364
		float r,g,b,e, m;
365
		/* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
365
		/* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
366
		e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
366
		e = scale * (float)ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
367
		r = e * img[0];
367
		r = e * img[0];
368
		g = e * img[1];
368
		g = e * img[1];
369
		b = e * img[2];
369
		b = e * img[2];
370
		m = (r > g) ? r : g;
370
		m = (r > g) ? r : g;
371
		m = (b > m) ? b : m;
371
		m = (b > m) ? b : m;
372
		/* and encode it into RGBdivA */
372
		/* and encode it into RGBdivA */
373
		iv = (m != 0.0f) ? (int)(255.0f / m) : 1.0f;
373
		iv = (m != 0.0f) ? (int)(255.0f / m) : 1;
374
		iv = (iv < 1) ? 1 : iv;
374
		iv = (iv < 1) ? 1 : iv;
375
		img[3] = (iv > 255) ? 255 : iv;
375
		img[3] = (iv > 255) ? 255 : iv;
376
		iv = (int)(img[3] * r + 0.5f);
376
		iv = (int)(img[3] * r + 0.5f);
377
		img[0] = (iv > 255) ? 255 : iv;
377
		img[0] = (iv > 255) ? 255 : iv;
378
		iv = (int)(img[3] * g + 0.5f);
378
		iv = (int)(img[3] * g + 0.5f);
Line 410... Line 410...
410
	for( i = width * height; i > 0; --i )
410
	for( i = width * height; i > 0; --i )
411
	{
411
	{
412
		/* decode this pixel, and find the max */
412
		/* decode this pixel, and find the max */
413
		float r,g,b,e, m;
413
		float r,g,b,e, m;
414
		/* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
414
		/* e = scale * powf( 2.0f, img[3] - 128.0f ) / 255.0f; */
415
		e = scale * ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
415
		e = scale * (float)ldexp( 1.0f / 255.0f, (int)(img[3]) - 128 );
416
		r = e * img[0];
416
		r = e * img[0];
417
		g = e * img[1];
417
		g = e * img[1];
418
		b = e * img[2];
418
		b = e * img[2];
419
		m = (r > g) ? r : g;
419
		m = (r > g) ? r : g;
420
		m = (b > m) ? b : m;
420
		m = (b > m) ? b : m;
421
		/* and encode it into RGBdivA */
421
		/* and encode it into RGBdivA */
422
		iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1.0f;
422
		iv = (m != 0.0f) ? (int)sqrtf( 255.0f * 255.0f / m ) : 1;
423
		iv = (iv < 1) ? 1 : iv;
423
		iv = (iv < 1) ? 1 : iv;
424
		img[3] = (iv > 255) ? 255 : iv;
424
		img[3] = (iv > 255) ? 255 : iv;
425
		iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f);
425
		iv = (int)(img[3] * img[3] * r / 255.0f + 0.5f);
426
		img[0] = (iv > 255) ? 255 : iv;
426
		img[0] = (iv > 255) ? 255 : iv;
427
		iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f);
427
		iv = (int)(img[3] * img[3] * g / 255.0f + 0.5f);