constructor TBGRAAnimatedGif.Create(filenameUTF8: string);When there was no UTF8-handling function, it has been added. The class TFileStreamUTF8 is now used whenever possible to ensure maximum support of any UTF8 character.

Gtk (linux)There was a bug when drawing an image on the canvas, sometimes the image had offset. This is hopefully corrected in 7.3 (tested on Lubuntu 32-bit).

New units- BGRAGrayscaleMask: it is a light version of a bitmap having only one grayscale and linear channel. It does not provide any drawing capacities for now, except setpixel and direct pixel access. It is used internally by BGRAText.

- BGRAReadBMP, BGRAReadGif, BGRAReadPCX, BGRAReadPng, BGRAReadPSD, BGRAReadTGA, BGRAReadIco, bgrareadjpeg, BGRAReadXPM: these units are readers for images, that are automatically included in the program, to provide optimisations, corrections and additions to the standard ones provided by FreePascal. You may not need to make explicit reference to them because you can use them using the new TBGRAImageFormat enumeration.

- BGRAReadLzp, BGRAWriteLzp, BGRALzpCommon: this introduce a new version of Lzp format that you can use just like other image formats. The Lzp use by default a kind of RLE that is fast and does a compression that is in general a bit less efficient than PNG but still quite good (and surely much fast than PNG or zstream). It also supports layers. The software LazPaint use this format to store layered images. Note that in BGRABitmap, for now, you can only load and save flat images, so loading a layered image will just give you the flattened image of it.

property TimeUntilNextImageMs: integer read GetTimeUntilNextImage;It returns the time in milliseconds before the next frame will be rendered. The value zero means that the Gif should be updated immedialty.

BGRABitmapTypes- TResampleFilter provides now rfBox, which is high quality version of the stretched image. Note that the algorithm for stretched draw has been changed, it is to some extent faster and gives nice results except when the size becomes smaller than a half. In this case, not all pixels may be used to compute the resulting image. This makes it fast whatever the size of the original image is.- TBGRAImageFormat = (ifUnknown, ifJpeg, ifPng, ifGif, ifBmp, ifIco, ifPcx, ifPaintDotNet, ifLazPaint, ifOpenRaster, ifPsd, ifTarga, ifTiff, ifXwd, ifXPixMap) are all the formats read by BGRABitmap. This goes with the following functions:

procedure CrossFade(ARect: TRect; Source1, Source2: IBGRAScanner; AFadePosition: byte; mode: TDrawMode = dmDrawWithTransparency); override; procedure CrossFade(ARect: TRect; Source1, Source2: IBGRAScanner; AFadeMask: IBGRAScanner; mode: TDrawMode = dmDrawWithTransparency); override; procedure StretchPutImage(ARect: TRect; Source: TBGRACustomBitmap; mode: TDrawMode; AOpacity: byte = 255); override;StretchPutImage does what is says: it is faster than storing the resampled image first with Resample and then use Putimage.CrossFade: draws a transition between two images. If the fade position is a constant value, then it is equivalent to simple fade between two images. When using a fademask, you can vary the progression of the fade not only during time but also in space. For example you can make the left part of the image show Source1 and the right part show Source2.

You may need to adjust the values of the property ScanOffset if the images are not all aligned on the same top-left corner.

Some functions give you the resulting bounds of drawing an image with an affine transformation:

VerticalFlip and HorizontalFlip now can take a rectangle as a parameter to specify the area to be flipped. Note that these functions do not care about the clipping rectangle, so if you want to take it into account, you need to do an IntersectRect with ClipRect.

procedure ApplyMask(mask: TBGRACustomBitmap; ARect: TRect; AMaskRectTopLeft: TPoint); override;To specify the area and an offset for the mask. ApplyMask do not care about the clipping rectangle either.

StretchPutImage is cool you can add StretchAndDraw in a tcanvas as destination?

Also you can add noise filter? Is random bw or random rgb (select one with a radio button) with alpha in a slider. Also in photoshop if i remember well rhere is a blur parameter. Is usefull to add some realism or texture to images. Combined with a blend mode.

Now bgracontrols are faster thanks!

Also we have added uecontrols and analog controls. About 25 usable ui controls! Plus lazpaint!

About StretchAndDraw, well the thing is that it would be equivalent to Resample(rmSimpleStretch) + Draw. It would not be optimised as it is not possible to access video memory directly. However I understand that it would be a bit simpler. I guess I would like to encourage people to resample their image once, store it, and then draw it.

About noise filter, yes it is possible to add it. For now, you can do it using the Function filter, by writing "random" in the expression. I reckon it is not very simple.

What's new:- Lanczos filter. Specify rfLanczos2, rfLanczos3 or rfLanczos4 for the ResampleFilter property.- PutImageAffine, PutImageAngle and FilterRotate have a CorrectBlur parameter that reduces the blur effect due to the mix of pixels- BGRAGradientScanner.TBGRARandomScanner added: it fills with pixels with random values (grayscale or color)- BGRATypeWriter.TBGRAPolygonalGlyph has now an option to choose between angle/curve instead of autodetection

That is an interesting idea to do the difference of gaussians. You can use a radial blur, however, it is not very fast, so you would better use a fast blur I presume.

About function filter, we were talking with 007 of LazPaint filters (menu Filter). It uses an expression parser to apply a formula to each pixel separately. So this is different from kernels that are use to combine pixels.

In order to implement it, I have added BGRAGradientScanner.TBGRARandomScanner that you can use like that:

//SVG needs to be drawn on a Canvas2D surface svg.Draw(bmp.Canvas2D,50,50,cuPoint); //SVG can be saved in a file that can be viewed in //a web browser or in InkScape for example svg.SaveToFile('test.svg'); svg.Free;

//you can display the bitmap or save it to a file

bmp.Free;end;

Drawing improvements- PutImageAffine and PutImageAngle have more options- function to get intermediate pixels using integer values only :

Misc- LZP format can store paletted RGB (automatically reduce the size of images with less than 256 colors)- Fixed a bug with TBGRABitmap.SaveToFile calling the wrong sub function- Fixed a bug with fill function when there would be a point without a successor- optimisation of bitmap rotation- more robust streaming of layered images- other small fixes

Nice to see how BGRABitmap is growing up and now you are going to CSS world. I'm impressed. Maybe in future we will have good alternative for HTMLPort or IpHTMLPanel . I have question, you are drawing text by your self right? I mean, you are not using OS API for that. I always wanted to create "own drawed" TEdit like control. Main purpose is:- Text hint / placeholder on all platforms (Qt, Gtk, Windows). This is a hint which is showed when edit text is empty. Normally only Gtk (ver 3+) and Qt has it, but due that windows edit doesn't, LCL is not publishing this property- Extra buttons inside TEdit

My questions is: do BGRABitmap has some handy routines for text drawing? I tried do this using TCanvas but I have problems with calculating word wrap for static and selected text (it was dependend on OS API), cursor pos etc.