Index:
[thread]
[date]
[subject]
[author]
From: mongoose@ms241739.users.mindspring.com
To : ggi-develop@eskimo.com
Date: Sun, 4 Jul 1999 00:46:46 -0400 (EDT)
ggi buffer format
Hey guys!
I have translucent and transparent drawing done. I can draw jpgs and ppms
with masks too. One problem... I have to convert the ggi buffer from get
box to *my image buffer format to use it correctly ( and faster ).
// Here's my translucent pixel Draw ( this works pretty good )
// I'm using C++ as a graphics lib wrapper ( makes it more portable )
// _vis is a ggi visual and _color a ggi color
void Gfx::update_pen(int r, int g, int b)
{
_color.r = r;
_color.g = g;
_color.b = b;
ggiSetGCForeground(_vis, ggiMapColor(_vis, &_color));
}
void Gfx::TranslucentDrawPixel(int x, int y)
{
ggi_pixel funky_pixel;
ggi_color tmp_color;
// Get the ggi_pixel at P(x,y) in visual _vis
ggiGetPixel(_vis, x, y, &funky_pixel);
//ggiUnmapPixel gets the ggi_color associated with the gg_pixel
ggiUnmapPixel(_vis, funky_pixel, &tmp_color);
// Hhhmmm... account for mtk_pixel_t alpha values later (slow)
tmp_color.r = (_color.r + tmp_color.r) >> 1;// >> _color.a;
tmp_color.b = (_color.b + tmp_color.b) >> 1;// >> _color.a;
tmp_color.g = (_color.g + tmp_color.g) >> 1;// >> _color.a;
// update pen ( this is faster than calling update_pen()
ggiSetGCForeground(_vis, ggiMapColor(_vis, &tmp_color));
// Draw "translucent" pixel
ggiDrawPixel(_vis, x, y);
}
Well here's the part I have trouble with, I can't convert ggi buffers to
my mtk buffers. I have to have all imges using masking and translucent
draws in my mtk buffer format. ( I also use a simple compression
technique to reduce memory usage without quality loss. )
Here's the ascii output of the masks below. I made a Image of the word
quit in black on a blue field. I done this to remove the added complexity
of my masking code. This pseudo "mask" example draws X if the pixel isn't
black.
>From the ppm image loader:
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
I tried code something like this, where old image is cast as ggi_pixel*:
void Gfx::ExtractColor(ggi_pixel *pixel, int *r, int *b, int *g)
{
ggi_color tmp_color;
ggiUnmapPixel(_vis, *pixel, &tmp_color);
*r = tmp_color.r;
*b = tmp_color.b;
*g = tmp_color.g;
}
n = 0;
for (i = 0; i < _h; i++,printf("\n"))
{
for (j = 0; j < _w; j++)
{
gui->ExtractColor(&old_image[n], &r, &b, &g);
#ifdef DEBUG
// I only want to draw black in this case
if (r == 0 && b == 0 && g == 0)
printf(" ");
// any other color
else
printf("X");
// account for width of letters being 1/2 hieght
printf(" ");
#endif
n++;
}
}
[WARNING] Image->mtkConvertBuffer(): experimental
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
X X X X X X X X X X X X X X X X X X X X X X X X X X
Image->mtkConvertBuffer(): 0% compressed (1024|1024/1024) 4096bytes
Then I tried it with _w / 2, then drew the pixel out twice. It *almost
works. I get a deformed image that looks like the first "quit"... I tried
reading the buffer as a matrix too. I'm stumped...
Sorry about the huge images, but you have to see. =)
later,
Terry ( the other Mongoose on the list )
---------------------------------------------------
| BotShop http://www.planetquake.com/botshop |
| Personal http://www.westga.edu.com/~stu7440 |
| |
| Alita is running linux 2.2.9 w/ DoS fix |
Index:
[thread]
[date]
[subject]
[author]