>AggPas doesn't care where or what the data buffer is, as long as you tell >AggPas where to start, width, height and stride. > So use GetImage, assign that buffer to a pointer. Increment the pointer by (3 > *Size(Word)) and give that pointer to agg.Attach().
The data is preceded by 3 Longints, not words... sorry for my mistake. I understand the concept but I'm having difficulty getting the syntax right. What I Think I am doing is setting a pointer for my GetImage/Putimage then defining a second pointer that is 3 Longints into the Getimage/Putimage pointer for use with AggPas... Here is the a sample program that works with the non-dynamic variable {$mode objfpc}{$H+} uses shlobj, ptcgraph, ptccrt, sysutils, agg_pixfmt_rgb_packed, agg_2D; const RGB_WIDTH =2; Clock_W = 120; Clock_h = 40; type TClockBitmapBuffer=packed record width, height, reserved :longint; data :array[0..(Clock_W+1) * (Clock_H+1)] of word; end; var Newtime,Oldtime : Double; Bufsize : Longint; gd,gm : smallint; aggClock,aggClock2 : Agg2D_ptr; Font2use,FontPath : Array[0..MaxPathLen] of Char; clockbuffer_Original : TClockBitmapbuffer; clockbuffer_with_time : Tclockbitmapbuffer; Aggclockbuffer : TClockbitmapbuffer; Begin gd:=d16Bit; gm:=m800x600; ptcgraph.Initgraph(gd,gm,''); SHGetSpecialFolderPath(0,FontPath,CSIDL_FONTS,false); font2use:=FontPath+'\Lucon.ttf'; GetImage((GetMaxX-4)-Clock_W+1, 4, GetMaxX-4, 4+Clock_H-1, ClockBuffer_original); ClockBuffer_With_Time:=ClockBuffer_original; New(aggClock , Construct(@pixfmt_rgb565)); aggClock^.attach(@Clockbuffer_with_time.data,Clock_W, Clock_H, -Clock_W * RGB_WIDTH); aggclock^.Font(font2use ,12 ); aggclock^.LineColor($FF ,$FF ,$00 ); aggclock^.FillColor($FF ,$FF ,$60 ); Repeat Newtime:=now; If Trunc(Newtime*346600)<>Trunc(Oldtime*345600) Then //update every 1/4 second Begin OldTime:=NewTime; ClockBuffer_With_Time:=ClockBuffer_original; aggclock^.Text(2 ,19,FormatDateTime('hh:nn:ssam/pm',Now)); Putimage((GetMaxX-4)-Clock_W, 4, Clockbuffer_With_Time , normalPut); End; until keypressed; End. Here is my attempt to define it with a dynamic variable.. It compiles, but when I try to run it I get an access violation and runtime error 217 I'm pretty sure I’m not assigning the pointer for Aggclockbuffer correctly and I don't think I'm attaching it to AggPas correctly either. Corrections are greatly appreciated. {$mode objfpc}{$H+} uses shlobj, ptcgraph, ptccrt, sysutils, agg_pixfmt_rgb_packed, agg_2D; const RGB_WIDTH =2; Clock_W = 120; Clock_h = 40; Var Newtime,Oldtime : Double; Bufsize : Longint; gd,gm : smallint; aggClock,aggClock2 : Agg2D_ptr; Font2use,FontPath : Array[0..MaxPathLen] of Char; clockbuffer_Original : ^Byte; clockbuffer_with_time : ^Byte; Aggclockbuffer : ^Byte; Begin gd:=d16Bit; gm:=m800x600; ptcgraph.Initgraph(gd,gm,''); SHGetSpecialFolderPath(0,FontPath,CSIDL_FONTS,false); font2use:=FontPath+'\Lucon.ttf'; bufSize:=ImageSize((GetMaxX-4)-Clock_W, 4 , GetMaxX-4, 4+Clock_H); GetMem(ClockBuffer_Original, bufSize); { Allocate memory on heap } GetImage((GetMaxX-4)-Clock_W+1, 4, GetMaxX-4, 4+Clock_H-1, ClockBuffer_original^); ClockBuffer_With_Time:=ClockBuffer_original; AggClockbuffer^:=ClockBuffer_With_Time^+3*Sizeof(Longint); //Set AggClockBuffer to be 3 Longints past ClockBuffer_with_time New(aggClock , Construct(@pixfmt_rgb565)); aggClock^.attach(@AggClockbuffer,Clock_W, Clock_H, -Clock_W * RGB_WIDTH); //Try to use AggClockbuffer pointer with AggPas aggclock^.Font(font2use ,12 ); aggclock^.LineColor($FF ,$FF ,$00 ); aggclock^.FillColor($FF ,$FF ,$60 ); Repeat Newtime:=now; If Trunc(Newtime*346600)<>Trunc(Oldtime*345600) Then //update every 1/4 second Begin OldTime:=NewTime; ClockBuffer_With_Time:=ClockBuffer_original; aggclock^.Text(2 ,19,FormatDateTime('hh:nn:ssam/pm',Now)); Putimage((GetMaxX-4)-Clock_W, 4, Clockbuffer_With_Time^ , normalPut); End; until KeyPressed; End. James _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal