Jump to content

Steve Maughan

  • Content Count

  • Joined

  • Last visited

Community Reputation

12 Good

About Steve Maughan

  • Birthday September 23

Technical Information

  • Delphi-Version
    Delphi 10.3 Rio

Recent Profile Visitors

199 profile views
  1. Steve Maughan

    Combining bitmaps and preserving antialiased text quality...

    Hi Anders - this sound like what I need. Do you know of any code snippets? Thanks, Steve
  2. Steve Maughan

    Combining bitmaps and preserving antialiased text quality...

    Thanks David — this is what is feared. I had hoped it would act like a PNG with transparency at the pixel level. Cheers, Steve
  3. Steve Maughan

    Combining bitmaps and preserving antialiased text quality...

    Hi Vandrovnik — I'm aware of the basics of Difect2D, but how could I merge two Direct2D canvases and preserve the anti-aliasing of the text? If I'm not mistaken this isn't easy using Direct2D (but I'm far from being an expert on this). Thanks again, Steve
  4. Steve Maughan

    Combining bitmaps and preserving antialiased text quality...

    Interesting — how would you accomplish what I'd like to do using Direct2D? Thanks, Steve
  5. In my mapping application I need to merge different layers together to create the map. Question: how do I merge a bitmap with anti-aliased text with a bitmap showing a multi-colored image? Is there a way to draw the anti-aliased text on a bitmap with the alpha channel enabled and then have the transparency preserved / respected when it is combined with the other bitmap? Here's a simple example that shows the problem (code attached to this message): procedure TForm2.FormPaint(Sender: TObject); var f: TBitmap; b: TBitmap; x, y: integer; xText: string; xWidth, xHeight: integer; begin //-- Size of image xWidth := Form2.Width; xHeight := Form2.Height; //-- Create the background bitmap f := TBitmap.Create; f.PixelFormat := pf32bit; f.SetSize(xWidth, xHeight); f.Canvas.Brush.Color := clFuchsia; f.Canvas.FillRect(f.Canvas.ClipRect); //-- Create the bitmap with the text b := TBitmap.Create; b.PixelFormat := pf32bit; b.Canvas.Brush.Color := clWhite; b.SetSize(xWidth, xHeight); b.Canvas.Font.Size := 32; b.Canvas.Font.Color := clBlack; b.Canvas.Font.Quality := TFontQuality.fqDefault; //-- Draw the text xText := 'Delphi 25th'; x := (b.Width - b.Canvas.TextWidth(xText)) div 2; y := (b.Height - b.Canvas.TextHeight(xText)) div 2; b.Canvas.TextOut(x, y, xText); //-- Transfer the text layer to the background TransparentBlt(f.Canvas.Handle, 0, 0, xWidth, xHeight, b.Canvas.Handle, 0, 0, xWidth, xHeight, clWhite); //-- Transfer to the form's canvas Form2.Canvas.CopyRect(Form2.Canvas.ClipRect, f.Canvas, f.Canvas.ClipRect); b.Free; f.Free; end; This results in the following screen (also attached to this message): https://ibb.co/GVWRZ6Y You can see the ugly white around the text due to the anti-aliasing. Currently I use non anti-aliased text, but that also looks blocky and ugly too. Thanks and Happy Delphi 25th! Steve Anti-Aliased-Text.zip
  6. Steve Maughan

    Any Known GDI Lockup Issues with Delphi 10.3.2?

    I finally got to the bottom of this error. It's a bug in the Parallel Programming Library that ships with 10.3.2 and 10.3.3. Here's what happened... After I downgraded to 10.2.3 I was just pleased that the freezing stopped. I was also concerned that I'd be stuck using 10.2.3 for ever. So this week I upgraded again; this time to 10.3.3 in the hope the bug didn't show up in this version (the bug had initially appeared in 10.3.2). Unfortunately it showed up—I was gutted! I tried replacing the memory manager - that didn't work. I tried checking for resource leaks; there weren't any. I then switched the main rendering routine to use OmniThread instead of the PPL and that corrected the bug. It seems that after being under load, and then left for a while, the PPL's can suspend some threads for a period of up to 1 minute. If the suspended thread is in a "for" loop the program freezes. Eventually the application comes back to life but it happens repeatedly. The bug wasn't present in 10.2.3 but was present in 10.3.2. I'm elated that the bug is gone! Steve
  7. Hi Stefan - is it? I can't see why it would be a bad idea. Any links to enlighten me? Steve
  8. In truth, little. It's just part of an optimization algorithm that needs to be as fast as possible.
  9. I have quite a large list of 3000 objects stored in a TList<T>. I need to delete about half of them in a time-critical manner i.e. as fast as possible. I don't need to free the objects, just delete them from the list. Two possible approaches come to mind. I could simply iterate through the list and repeatedly call List.Delete(index) for each item I'd like to remove. Another alternative would be to set the item to nil and then call List.Pack at the end. Is there any advantage in the second approach? Any other insights appreciated. Steve
  10. Steve Maughan

    Any Known GDI Lockup Issues with Delphi 10.3.2?

    HI David, Anders & Attila, Thanks for the input - I really appreciate it. I've recompiled with Tokyo 10.2.3 and the problem seems to have gone. I'll need to investigate further. I have madExcept so I'll see if that helps first. Thanks again, Steve
  11. Steve Maughan

    Any Known GDI Lockup Issues with Delphi 10.3.2?

    Hi Anders, I took your advice. There was nothing on the call stack, even in debug mode: Interestingly, after the freeze I started Loom and SnagIt to record the video. Both wouldn't start until AlignMix was unfrozen. To me this implies it's something to do with Windows 10. Thanks, Steve
  12. Steve Maughan

    Any Known GDI Lockup Issues with Delphi 10.3.2?

    Here's a video showing the behavior: https://www.loom.com/share/8a00020c3ba440df9a8998dbe17dc1f0 Any suggestions greatly appreciated. Thanks, Steve
  13. Steve Maughan

    Any Known GDI Lockup Issues with Delphi 10.3.2?

    My mapping program is a VCL app that makes extensive use of GDI drawing to draw the map. I've recently upgraded from Delphi 10.2.3 to 10.3.2. The version compiled with Rio will often lock up after being used for 20 minutes. The app becomes unresponsive for about 15 seconds. In that time the CPU utilization is close to zero and the memory usage doesn't change. After the lock-up it will sometimes become fully responsive or in some case will only be responsive for a moment. There are no error message during or after a lockup. The application is compiled as 64 bit and uses about 1.6 Gb of memory while the test machine has 32 Gb i.e. it's not short of memory. What could cause the lockup? My first thoughts is it's something to do with GDI. Has anything changed with GDI in Delphi Rio compared to Delphi Tokyo? Or maybe it's a virus scanner. I use Panda Dome. I'll switch it for something else to see if that's the problem. Or could it be Windows 10 messing with the memory allocation? I've just updated to Windows 1909. I know it's a long shot but any suggestions are welcome. Steve