Began trying to describe "tinter" modes.

Noted tinter seems broken! (Always falls back to vector). Added debug printfs.
This commit is contained in:
William Kendrick 2006-03-12 22:55:22 +00:00
parent dbd91a4029
commit f9b5f0b4bf
3 changed files with 77 additions and 28 deletions

View file

@ -8,7 +8,7 @@
bill@newbreedsoftware.com bill@newbreedsoftware.com
http://www.newbreedsoftware.com/tuxpaint/ http://www.newbreedsoftware.com/tuxpaint/
June 14, 2002 - March 8, 2006 June 14, 2002 - March 12, 2006
-------------------------------------------------------------------------- --------------------------------------------------------------------------
@ -250,9 +250,10 @@ Stamps
example.) example.)
Nothing about the original image is used except the transparency Nothing about the original image is used except the transparency
("alpha" channel). The color of the stamp comes out solid. (from "alpha" channel). The color of the stamp comes out solid.
Add the word "colorable" to the stamp's data file. Add a line containing the word "colorable" to the stamp's data
file.
Tinted Tinted
@ -261,13 +262,26 @@ Stamps
the original image is used, but its hue is changed, based on the the original image is used, but its hue is changed, based on the
currently-selected color.) currently-selected color.)
Add the word "tintable" to the stamp's data file. Add a line containing the word "tintable" to the stamp's data
file.
Sometimes you don't want the white or gray parts of an image Tinting Options:
tinted (see for example the dry erase marker stamp in the default
stamp package). You can add the word "notintgray" to the stamp's Depending on the contents of your stamp, you might want to have
data file to accomplish this. Only areas with saturation over 25 % Tux Paint use one of a numer of methods when tinting it. Add one
are then tinted. of the following lines to the stamp's data file:
"tinter=normal" (default)
This is the normal tinting mode.
"tinter=anyhue"
This is ???.
"tinter=narrow"
This is ???.
"tinter=vector"
This is ???.
Unalterable Stamps Unalterable Stamps
@ -283,8 +297,8 @@ Stamps
To make a stamp un-flippable, add the option "noflip" to the stamp's To make a stamp un-flippable, add the option "noflip" to the stamp's
data file. data file.
To keep a stamp from being mirrored, add the option "nomirror" to To keep a stamp from being mirrored, add a line containing the word
the stamp's data file. "nomirror" to the stamp's data file.
Initial Stamp Size Initial Stamp Size

View file

@ -23,7 +23,7 @@ New Breed Software</p>
<p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br> <p><a href="mailto:bill@newbreedsoftware.com">bill@newbreedsoftware.com</a><br>
<a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p> <a href="http://www.newbreedsoftware.com/tuxpaint/">http://www.newbreedsoftware.com/tuxpaint/</a></p>
<p>June 14, 2002 - March 8, 2006</p> <p>June 14, 2002 - March 12, 2006</p>
</center> </center>
<hr size=2 noshade> <hr size=2 noshade>
@ -339,13 +339,13 @@ effect.</p>
example.)</p> example.)</p>
<p>Nothing about the original image is used except the transparency <p>Nothing about the original image is used except the transparency
("alpha" channel). The color of the stamp comes out solid.</p> (from "alpha" channel). The color of the stamp comes out solid.</p>
<center><img src="images/ex_colorable.png" width=74 height=92 <center><img src="images/ex_colorable.png" width=74 height=92
alt=""></center> alt=""></center>
<p>Add the word "<code><b>colorable</b></code>" to the stamp's data <p>Add a line containing the word "<code><b>colorable</b></code>"
file.</p> to the stamp's data file.</p>
</blockquote> </blockquote>
<h5>Tinted</h5> <h5>Tinted</h5>
@ -358,15 +358,30 @@ effect.</p>
<center><img src="images/ex_tintable.png" width=151 height=78 <center><img src="images/ex_tintable.png" width=151 height=78
alt=""></center> alt=""></center>
<p>Add the word "<code><b>tintable</b></code>" to the stamp's data <p>Add a line containing the word "<code><b>tintable</b></code>"
file.</p> to the stamp's data file.</p>
<p>Sometimes you don't want the white or gray parts of an image <h6>Tinting Options:</h6>
tinted (see for example the dry erase marker stamp in the default <blockquote>
stamp package). You can add the word "<code><b>notintgray</b></code>" <p>Depending on the contents of your stamp, you might want to
to the stamp's data file to accomplish this. Only areas with saturation have Tux&nbsp;Paint use one of a numer of methods when tinting it.
over 25 % are then tinted.</p> Add one of the following lines to the stamp's data file:</p>
<dl>
<dt>"<code><b>tinter=normal</b></code>" (default)</dt>
<dd>This is the normal tinting mode.</dd>
<dt>"<code><b>tinter=anyhue</b></code>"</dt>
<dd>This is ???.</dd>
<dt>"<code><b>tinter=narrow</b></code>"</dt>
<dd>This is ???.</dd>
<dt>"<code><b>tinter=vector</b></code>"</dt>
<dd>This is ???.</dd>
</dl>
</blockquote>
</blockquote> </blockquote>
</blockquote> </blockquote>
@ -385,7 +400,7 @@ effect.</p>
<p>To make a stamp un-flippable, add the option <p>To make a stamp un-flippable, add the option
"<code><b>noflip</b></code>" to the stamp's data file.</p> "<code><b>noflip</b></code>" to the stamp's data file.</p>
<p>To keep a stamp from being mirrored, add the option <p>To keep a stamp from being mirrored, add a line containing the word
"<code><b>nomirror</b></code>" to the stamp's data file.</p> "<code><b>nomirror</b></code>" to the stamp's data file.</p>
</blockquote> </blockquote>

View file

@ -3413,14 +3413,20 @@ static double tint_part_1(multichan *work, SDL_Surface *in)
&mc->or, &mc->og, &mc->ob, &mc->alpha); &mc->or, &mc->og, &mc->ob, &mc->alpha);
fill_multichan(mc,&u,&v); fill_multichan(mc,&u,&v);
// average out u and v, giving more weight to opaque high-saturation pixels
// average out u and v, giving more weight to opaque
// high-saturation pixels
// (this is to take an initial guess at the primary hue) // (this is to take an initial guess at the primary hue)
u_total += mc->alpha * u * mc->sat; u_total += mc->alpha * u * mc->sat;
v_total += mc->alpha * v * mc->sat; v_total += mc->alpha * v * mc->sat;
} }
} }
SDL_UnlockSurface(in); SDL_UnlockSurface(in);
fprintf(stderr, "u_total=%f\nv_total=%f\natan2()=%f\n",
u_total, v_total, atan2(u_total, v_total));
return atan2(u_total,v_total); return atan2(u_total,v_total);
} }
@ -3654,8 +3660,13 @@ static void tint_surface(SDL_Surface * tmp_surf, SDL_Surface * surf_ptr)
{ {
initial_hue = tint_part_1(work, surf_ptr); initial_hue = tint_part_1(work, surf_ptr);
printf("initial_hue = %f\n", initial_hue);
key_color_ptr = find_most_saturated(initial_hue, work, key_color_ptr = find_most_saturated(initial_hue, work,
width * height, &hue_range); width * height, &hue_range);
printf("key_color_ptr = %d\n", key_color_ptr);
if (key_color_ptr) if (key_color_ptr)
{ {
@ -3667,14 +3678,18 @@ static void tint_surface(SDL_Surface * tmp_surf, SDL_Surface * surf_ptr)
free(work); free(work);
return; return;
} }
else
{
fprintf(stderr, "find_most_saturated() failed\n");
}
free(work); free(work);
} }
/* Failed! Fall back: */ /* Failed! Fall back: */
//fprintf(stderr, "Falling back to tinter=vector, " fprintf(stderr, "Falling back to tinter=vector, "
// "this should be in the *.dat file\n"); "this should be in the *.dat file\n");
vector_tint_surface(tmp_surf, surf_ptr); vector_tint_surface(tmp_surf, surf_ptr);
} }
@ -9268,7 +9283,9 @@ static double loadinfo(const char * const fname, stamp_type *inf)
while(*cp && !isdigit(*cp)) while(*cp && !isdigit(*cp))
cp++; cp++;
tmp2 = strtod(cp,NULL); tmp2 = strtod(cp,NULL);
if (tmp>0.0001 && tmp<10000.0 && tmp2>0.0001 && tmp2<10000.0 && tmp2/tmp>0.0001 && tmp2/tmp<10000.0) if (tmp > 0.0001 && tmp < 10000.0 &&
tmp2 > 0.0001 && tmp2 < 10000.0 &&
tmp2 / tmp > 0.0001 && tmp2 / tmp < 10000.0)
ratio = tmp2/tmp; ratio = tmp2/tmp;
} }
else else
@ -9278,7 +9295,8 @@ static double loadinfo(const char * const fname, stamp_type *inf)
ratio = 1.0 / tmp; ratio = 1.0 / tmp;
} }
} }
else if (!memcmp(buf, "tinter", 6) && (isspace(buf[6]) || buf[6]=='=')) else if (!memcmp(buf, "tinter", 6) &&
(isspace(buf[6]) || buf[6]=='='))
{ {
char *cp = buf+7; char *cp = buf+7;
while (isspace(*cp) || *cp=='=') while (isspace(*cp) || *cp=='=')
@ -9303,6 +9321,8 @@ static double loadinfo(const char * const fname, stamp_type *inf)
{ {
debug(cp); debug(cp);
} }
printf("tinter=%d\n", inf->tinter);
} }
else if (strcmp(buf, "nomirror") == 0) else if (strcmp(buf, "nomirror") == 0)
inf->mirrorable = 0; inf->mirrorable = 0;