Gamma corrected scaling.
This commit is contained in:
parent
b0d141fed3
commit
f638afa63c
3 changed files with 39 additions and 4 deletions
|
|
@ -7,7 +7,7 @@ bill@newbreedsoftware.com
|
||||||
http://www.tuxpaint.org/
|
http://www.tuxpaint.org/
|
||||||
|
|
||||||
|
|
||||||
June 17, 2002 - February 24, 2010
|
June 17, 2002 - February 25, 2010
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
|
@ -92,6 +92,12 @@ $Id$
|
||||||
Public Domain. Archived at the Internet Archive:
|
Public Domain. Archived at the Internet Archive:
|
||||||
http://www.archive.org/details/tornado
|
http://www.archive.org/details/tornado
|
||||||
|
|
||||||
|
Gamma-correction in thumbnail/scaling routine based
|
||||||
|
example code from:
|
||||||
|
http://www.4p8.com/eric.brasseur/gamma.html
|
||||||
|
which was from "Gimp-gluas" plug-in for The GIMP:
|
||||||
|
http://pippin.gimp.org/plug-ins/gluas/
|
||||||
|
|
||||||
|
|
||||||
* Graphics
|
* Graphics
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ http://www.tuxpaint.org/
|
||||||
|
|
||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
2009.February.24 (0.9.22)
|
2009.February.25 (0.9.22)
|
||||||
* New Tools:
|
* New Tools:
|
||||||
----------
|
----------
|
||||||
* Label - A tool to add text to a drawing, which can be modified or
|
* Label - A tool to add text to a drawing, which can be modified or
|
||||||
|
|
@ -45,6 +45,10 @@ $Id$
|
||||||
|
|
||||||
* Other Improvements:
|
* Other Improvements:
|
||||||
-------------------
|
-------------------
|
||||||
|
* Thumbnailing (of UI elements, stamps, saved images, etc.) is now
|
||||||
|
gamma-corrected. See:
|
||||||
|
http://www.4p8.com/eric.brasseur/gamma.html
|
||||||
|
|
||||||
* Template images are now supported. Similar to Starters, they are
|
* Template images are now supported. Similar to Starters, they are
|
||||||
pre-drawn pictures to begin a new drawing with, accessed via the
|
pre-drawn pictures to begin a new drawing with, accessed via the
|
||||||
"New" dialog. The "Eraser" tool will erase back to the original
|
"New" dialog. The "Eraser" tool will erase back to the original
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,6 @@
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
#ifdef NOKIA_770
|
#ifdef NOKIA_770
|
||||||
# define LOW_QUALITY_THUMBNAILS
|
# define LOW_QUALITY_THUMBNAILS
|
||||||
# define LOW_QUALITY_STAMP_OUTLINE
|
# define LOW_QUALITY_STAMP_OUTLINE
|
||||||
|
|
@ -77,8 +76,12 @@
|
||||||
/* #define LOW_QUALITY_STAMP_OUTLINE */
|
/* #define LOW_QUALITY_STAMP_OUTLINE */
|
||||||
/* #define NO_PROMPT_SHADOWS */
|
/* #define NO_PROMPT_SHADOWS */
|
||||||
/* #define USE_HWSURFACE */
|
/* #define USE_HWSURFACE */
|
||||||
|
|
||||||
|
/* FIXME: Deal with this option properly -bjk 2010.02.25 */
|
||||||
|
#define GAMMA_CORRECTED_THUMBNAILS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Disable fancy cursors in fullscreen mode, to avoid SDL bug: */
|
/* Disable fancy cursors in fullscreen mode, to avoid SDL bug: */
|
||||||
/* (This bug is still around, as of SDL 1.2.9, October 2005) */
|
/* (This bug is still around, as of SDL 1.2.9, October 2005) */
|
||||||
/* (Is it still in SDL 1.2.11 in May 2007, though!? -bjk) */
|
/* (Is it still in SDL 1.2.11 in May 2007, though!? -bjk) */
|
||||||
|
|
@ -8240,7 +8243,11 @@ static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
int x, y;
|
int x, y;
|
||||||
float src_x, src_y, off_x, off_y;
|
float src_x, src_y, off_x, off_y;
|
||||||
SDL_Surface *s;
|
SDL_Surface *s;
|
||||||
|
#ifdef GAMMA_CORRECTED_THUMBNAILS
|
||||||
|
float tr, tg, tb, ta;
|
||||||
|
#else
|
||||||
Uint32 tr, tg, tb, ta;
|
Uint32 tr, tg, tb, ta;
|
||||||
|
#endif
|
||||||
Uint8 r, g, b, a;
|
Uint8 r, g, b, a;
|
||||||
float xscale, yscale;
|
float xscale, yscale;
|
||||||
int tmp;
|
int tmp;
|
||||||
|
|
@ -8248,7 +8255,6 @@ static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
Uint32(*getpixel) (SDL_Surface *, int, int) =
|
Uint32(*getpixel) (SDL_Surface *, int, int) =
|
||||||
getpixels[src->format->BytesPerPixel];
|
getpixels[src->format->BytesPerPixel];
|
||||||
|
|
||||||
/* FIXME: Deal with gamma, per: http://www.4p8.com/eric.brasseur/gamma.html */
|
|
||||||
/* Determine scale and centering offsets: */
|
/* Determine scale and centering offsets: */
|
||||||
|
|
||||||
if (!keep_aspect)
|
if (!keep_aspect)
|
||||||
|
|
@ -8314,6 +8320,13 @@ static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
for (x = 0; x < max_x; x++)
|
for (x = 0; x < max_x; x++)
|
||||||
{
|
{
|
||||||
#ifndef LOW_QUALITY_THUMBNAILS
|
#ifndef LOW_QUALITY_THUMBNAILS
|
||||||
|
|
||||||
|
#ifdef GAMMA_CORRECTED_THUMBNAILS
|
||||||
|
/* per: http://www.4p8.com/eric.brasseur/gamma.html */
|
||||||
|
float gamma = 2.2;
|
||||||
|
float gamma_invert = 1.0 / gamma;
|
||||||
|
#endif
|
||||||
|
|
||||||
tr = 0;
|
tr = 0;
|
||||||
tg = 0;
|
tg = 0;
|
||||||
tb = 0;
|
tb = 0;
|
||||||
|
|
@ -8330,9 +8343,15 @@ static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
SDL_GetRGBA(getpixel(src, src_x, src_y),
|
SDL_GetRGBA(getpixel(src, src_x, src_y),
|
||||||
src->format, &r, &g, &b, &a);
|
src->format, &r, &g, &b, &a);
|
||||||
|
|
||||||
|
#ifdef GAMMA_CORRECTED_THUMBNAILS
|
||||||
|
tr = tr + pow((float)r, gamma);
|
||||||
|
tb = tb + pow((float)b, gamma);
|
||||||
|
tg = tg + pow((float)g, gamma);
|
||||||
|
#else
|
||||||
tr = tr + r;
|
tr = tr + r;
|
||||||
tb = tb + b;
|
tb = tb + b;
|
||||||
tg = tg + g;
|
tg = tg + g;
|
||||||
|
#endif
|
||||||
ta = ta + a;
|
ta = ta + a;
|
||||||
|
|
||||||
tmp++;
|
tmp++;
|
||||||
|
|
@ -8346,6 +8365,12 @@ static SDL_Surface *thumbnail2(SDL_Surface * src, int max_x, int max_y,
|
||||||
tg = tg / tmp;
|
tg = tg / tmp;
|
||||||
ta = ta / tmp;
|
ta = ta / tmp;
|
||||||
|
|
||||||
|
#ifdef GAMMA_CORRECTED_THUMBNAILS
|
||||||
|
tr = pow(tr, gamma_invert);
|
||||||
|
tg = pow(tg, gamma_invert);
|
||||||
|
tb = pow(tb, gamma_invert);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (keep_alpha == 0 && s->format->Amask != 0)
|
if (keep_alpha == 0 && s->format->Amask != 0)
|
||||||
{
|
{
|
||||||
tr = ((ta * tr) / 255) + (255 - ta);
|
tr = ((ta * tr) / 255) + (255 - ta);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue