On a similar note, what would be the best way to blit something like video onto the display? What kind of special things need to be implemented to have something akin to full motion video?
John -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] On Behalf Of Micah Dowty Sent: Monday, October 22, 2001 11:53 AM To: Olivier Bornet Cc: PicoGUI Devel Subject: Re: [Pgui-devel] Primitive for displaying fast a RGB buffer PicoGUI's pgNewBitmap function can handle this. It supports the PPM format, which is just 24-bit RGB data with a small header. Here's an example of generating an RGB bitmap at runtime: ------8<------ /* Demonstration of loading RGB pixel values as a bitmap in PicoGUI */ #include <picogui.h> #include <malloc.h> /* Build a 24-bit PPM file with a 2D gradient */ pghandle gradient_bitmap(void) { char *pnmfile,*bitdata,*p; int w,h,x,y; long size; /* Allocate memory to construct our bitmap in */ w = 255; h = 255; size = w * h * 3 + 20; /* 20 is space for our header */ pnmfile = malloc(w * h * 3 + 20); /* Write the header for a binary 24-bit PPM file */ bitdata = pnmfile + sprintf(pnmfile,"P6 %d %d 255\n",w,h); /* Draw some colors in our bitmap */ p = bitdata; for (y=0;y<h;y++) for (x=0;x<w;x++) { *(p++) = 0; /* Red */ *(p++) = x; /* Green */ *(p++) = y; /* Blue */ } /* Allocate a picogui bitmap, freeing our buffer */ return pgNewBitmap(pgFromTempMemory(pnmfile,size)); } /* Make an app to show our bitmap in */ int main(int argc, char **argv) { pgInit(argc,argv); pgRegisterApp(PG_APP_NORMAL,"RGB Bitmap Test",0); pgNewWidget(PG_WIDGET_BITMAP,0,0); pgSetWidget(PGDEFAULT, PG_WP_SIDE,PG_S_ALL, PG_WP_BITMAP,gradient_bitmap(), 0); pgEventLoop(); return 0; } ------>8------ Also: In Waba, isn't this function mainly used for loading BMP format data? PicoGUI is now capable of loading BMP data in pgNewBitmap(), so you should be able to bypass Waba's built-in BMP decoder and just send the BMP file itself to pgNewBitmap(). Quoting Olivier Bornet <[EMAIL PROTECTED]>: > Hello, > > I want to display a RGB buffer I have in memory (let's call it > rgbbuf). > The buffer consist of an array of the red, green and blue values of > each > pixel (red1, green1, blue1, red2, green2, blue2, red3, green3, blue3, > ...). No separation are made for lines break. I just know the width > (w) > and height (h) of the bitmap. > > I can do it with something like : > > pos = rgbbuf; > for( myY = 0; myY < h; myY++ ) { > for( myX = 0; myX < w; myX++ ) { > > myColor = ((pgcolor *)pos)[ 0 ]; > pos += 3; > > pgSetColor( gc, myColor ); > pgPixel( gc, x + myX, y + myY ); > > } > } > > But this is slow. The slowing part is to make every time the > pgSetColor() and pgPixel(). I have try to go trough a bitmap in > memory, > but without significant improvement. > > In gtk, we have the function gdk_draw_rgb_image() for this. > > Thanks in advance. > > Olivier > -- > Olivier Bornet SMARTDATA SA > [EMAIL PROTECTED] Centre du Parc > http://www.smartdata.ch av. des Pr�s-Beudin 20 > Phone +41-27-723'55'03 1920 Martigny > Fax +41-27-723'55'19 Phone +41-27-723'55'18 > > _______________________________________________ > Pgui-devel mailing list > [EMAIL PROTECTED] > https://lists.sourceforge.net/lists/listinfo/pgui-devel > -- Only you can prevent creeping featurism! _______________________________________________ Pgui-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/pgui-devel _______________________________________________ Pgui-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/pgui-devel
