On Tue, 06 Feb 2007 13:29:21 -0200
Luiz Americo Pereira Camara <[EMAIL PROTECTED]> wrote:

> Mattias Gaertner wrote:
> > On Mon, 05 Feb 2007 09:52:50 -0300
> > Luiz Americo Pereira Camara <[EMAIL PROTECTED]> wrote:
> >
> >   
> >> Mattias Gaertner wrote:
> >>     
> >>>>   - Should i implement GetCurrentObject?
> >>>>     
> >>>>         
> >>> IMO it would be better to improve TBitmap.
> >>>   
> >>>       
> >> Currently TBitmap uses GetObject, so implementing it will also
> >> benefit TBitmap. I'll take a look and keep you informed.
> >>     
> >
> > It uses it, but contrary to the VCL the LCL TBitmap leaves all
> > implementation details to the widgetset. It uses only parts of the
> > header information like width and height - the minimum set that
> > works on all platforms.
> > We have to extend the tagBitmap record, or replace the GetObject
> > call in TBitmap with a more platform independent one. IMO the
> > latter would be better.
> >   
> I did some research in gtk side and found that is not viable to 
> implement GetObject for Bitmaps in a crossplatform way.
> I found that gtk1  does not provides a direct pointer for a bitmap
> since it fetches the data from the X server (not surprise due to its
> design). I dont know if gtk2, qt does some buffering or whatever
> 
> Currently, GetRawImage does copy a image in a buffer.

Yes, it should be extended to optionally return the direct pointer if
available.


> To minimize
> this i think in introduce some functions (the names are dummy) to get
> the direct pointer or the nearest possible:
> 
> TBitmapRecord: Info of the Bitmap necessary to process the image + 
> Bitmap Data Pointer + Pointer To Private Resource
> 
> function GetBitmapData(HBITMAP;var TBitMapRecord, Whatever);
> function ReleaseBitmapData(TBitMapRecord);

The parameters will probably look like TRawImageDescription. Maybe we
don't need a new function, just extend the RawImageXXX functions.

 
> Under Win32:
>    GetBitmapData: will get the Direct pointer through GetObject
>    ReleaseBitmapData: Does nothing
> 
> Under Gtk
>   GetBitmapData: will get the Data Pointer from a PGdKImage created 
> through gdk_image_get (No copy to buffer here). Stores the GdkImage
> in Private Resource Field
>   ReleaseBitmapData: Releases the GdkImage

Beware: gdk_image_get does not always return a direct pointer. Not even
the format of putting and getting is the same. At the moment the gtk
intf auto converts if it spots a difference.

 
> With this abstraction we avoid the current copy in gtk (the possible) 
> and get a direct pointer in win32 in a transparent way.
> 
> Is necessary to define what informations should be fetched (the
> minimal necessary to process the image and also common between the
> interfaces), the functions parameters, returnvalues, see the other
> interfaces, etc.
> 
> BTW: I found a way to simplify/optimize the code  of GetRawImage*
> under win32. I will do some testing and post a patch later.

Great.

Mattias

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

Reply via email to