Re: [lazarus] Converting a GdkPixbuf into a TBitmap

2006-05-28 Thread Felipe Monteiro de Carvalho

On 5/27/06, Mattias Gaertner <[EMAIL PROTECTED]> wrote:

Thanks for the trick.
I added it to the gtk2 interface.
You can now take a screenshot with:

  MyBitmap:=TBitmap.Create;
  ScreenDC:=GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  ReleaseDC(ScreenDC);


Thank you very much. This just eliminated ImageMagick dependency for
the magnifier, and also improved the performance dramatically.

--
Felipe Monteiro de Carvalho

_
To unsubscribe: mail [EMAIL PROTECTED] with
   "unsubscribe" as the Subject
  archives at http://www.lazarus.freepascal.org/mailarchives


Re: [lazarus] Converting a GdkPixbuf into a TBitmap

2006-05-27 Thread Mattias Gaertner
On Thu, 18 May 2006 10:25:23 -0300
"Felipe Monteiro de Carvalho" <[EMAIL PROTECTED]> wrote:

> Hello,
> 
> I am testing some gdk functions, and I'd like to connect them to LCL.
> 
> My current gtk code is this one:
> 
>   Pixbuf := gdk_pixbuf_get_from_drawable(nil,
> gdk_screen_get_root_window(gdk_screen_get_default),
>gdk_window_get_colormap(gdk_screen_get_root_window(gdk_screen_get_defa
>ult)), 0, 0, 0, 0, CXScreen - 1, CYScreen -1);

Thanks for the trick.
I added it to the gtk2 interface.
You can now take a screenshot with:

  MyBitmap:=TBitmap.Create;
  ScreenDC:=GetDC(0);
  MyBitmap.LoadFromDevice(ScreenDC);
  ReleaseDC(ScreenDC);


Mattias



> 
>   gdk_pixbuf_save(Pixbuf, '/home/felipe/tmp/tmp.png', 'png', nil);
> 
> This takes a screenshot of the screen. This works.
> 
> Now, I'd like to save that Pixbuf into a TBitmap, so I can display it
> in a lazarus form. How can I do that? Do I need to manually copy the
> memory of the image into the TBitmap? Or just using gtk functions is
> enougth?
> 
> I attempted to draw the pixbuf into a created, but empty TBitmap:
> 
>   GDIObject := PgdiObject(bmpDisplay.Handle);
> 
>   gdk_draw_pixbuf(GDIObject^.GDIPixmapObject, nil, Pixbuf, 0, 0, 0, 0,
>CXScreen - 1, CYScreen -1, GDK_RGB_DITHER_NONE, 0, 0);
> 
> But this doesn't work.
> 
> In case anyone wants to test this, I declared my own gdk functions,
> because they are Gtk2.2+ specific.
> 
> uses gdk2, gtkdef, gdk2pixbuf, gtk2, glib2;
> 
> procedure gdk_display_get_pointer(display : PGdkDisplay; screen
> :PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl;
> external gdklib;
> function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;
> 
> procedure gdk_draw_pixbuf(drawable : PGdkDrawable; gc : PGdkGC; pixbuf
> : PGdkPixbuf; src_x, src_y, dest_x, dest_y, width, height : gint;
>  dither : TGdkRgbDither;
> x_dither, y_dither : gint); cdecl; external gdklib;
> 
> function gdk_screen_get_default: PGdkScreen; cdecl; external gdklib;
> 
> 
> thanks,

_
 To unsubscribe: mail [EMAIL PROTECTED] with
"unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives


[lazarus] Converting a GdkPixbuf into a TBitmap

2006-05-18 Thread Felipe Monteiro de Carvalho

Hello,

I am testing some gdk functions, and I'd like to connect them to LCL.

My current gtk code is this one:

 Pixbuf := gdk_pixbuf_get_from_drawable(nil,
gdk_screen_get_root_window(gdk_screen_get_default),
  gdk_window_get_colormap(gdk_screen_get_root_window(gdk_screen_get_default)),
  0, 0, 0, 0, CXScreen - 1, CYScreen -1);

 gdk_pixbuf_save(Pixbuf, '/home/felipe/tmp/tmp.png', 'png', nil);

This takes a screenshot of the screen. This works.

Now, I'd like to save that Pixbuf into a TBitmap, so I can display it
in a lazarus form. How can I do that? Do I need to manually copy the
memory of the image into the TBitmap? Or just using gtk functions is
enougth?

I attempted to draw the pixbuf into a created, but empty TBitmap:

 GDIObject := PgdiObject(bmpDisplay.Handle);

 gdk_draw_pixbuf(GDIObject^.GDIPixmapObject, nil, Pixbuf, 0, 0, 0, 0,
  CXScreen - 1, CYScreen -1, GDK_RGB_DITHER_NONE, 0, 0);

But this doesn't work.

In case anyone wants to test this, I declared my own gdk functions,
because they are Gtk2.2+ specific.

uses gdk2, gtkdef, gdk2pixbuf, gtk2, glib2;

procedure gdk_display_get_pointer(display : PGdkDisplay; screen
:PGdkScreen; x :Pgint; y : Pgint; mask : PGdkModifierType); cdecl;
external gdklib;
function gdk_display_get_default:PGdkDisplay; cdecl; external gdklib;

procedure gdk_draw_pixbuf(drawable : PGdkDrawable; gc : PGdkGC; pixbuf
: PGdkPixbuf; src_x, src_y, dest_x, dest_y, width, height : gint;
dither : TGdkRgbDither;
x_dither, y_dither : gint); cdecl; external gdklib;

function gdk_screen_get_default: PGdkScreen; cdecl; external gdklib;


thanks,
--
Felipe Monteiro de Carvalho

_
To unsubscribe: mail [EMAIL PROTECTED] with
   "unsubscribe" as the Subject
  archives at http://www.lazarus.freepascal.org/mailarchives