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

Reply via email to