JPG and PNG inside a database (VCL)

In VCL applications we can easily add images to a database using the TDBImage component. But TDBImage only supports Bitmaps (BMP), and these uncompressed images take a lot of space and network bandwidth to store them. Fortunately it is quite easy to store compressed JPG and PNG images inside a database using TWICImage.

The TWICImage component has been available since Delphi 2010, and it uses Windows DirectX to determine and handle multiple image formats. It is actually an encapsulation of the Windows Imaging Component (WIC). We can use TWICImage to determine the type of an image and have it create a correct image format header. We can then save this header + image into a blob field.


procedure SavePictureFileToField(PictureFile: TFileName; Field: TBlobField);
var
  lWICImage: TWICImage;

begin
  lWICImage := TWICImage.Create;
  lWICImage.LoadFromFile(PictureFile);
  Field.Assign(lWICImage);
  lWICImage.Free;
end;

When we later read this image from the blob field, we use TWICImage to interpret the header and then assign it into a TImage.Picture for display.


procedure LoadPictureFromField(Field: TBlobField; Picture: TPicture);
var
  lWICImage: TWICImage;

begin
  if (Field.BlobSize > 0) then
  begin {Assume image}
    lWICImage := TWICImage.Create;
    lWICImage.Assign(Field);
    Picture.Assign(lWICImage);
    lWICImage.Free;
  end
  else {Empty}
  begin
    Picture.Assign(nil);
  end;
end;

And that’s all.

This code will work for any Delphi version starting from Delphi 2010.

Please note that if you are creating a multi-device / FireMonkey application you should not use TWICImage, the FireMonkey TImage and TImageControl both already handle all types of images just fine themselves and going through TWICImage would not be of benefit, in fact it would lock you into Windows.

Completed source code as a simple VCL SQLLite XE7 database application can be downloaded here: DBImage_JPG_PNG

Android training 19, 20 juni 2014

In deze training leer je meer dan alleen een eenvoudige Android app maken met Delphi. Je leert ook hoe je gebruik maakt van Local Storage, REST, JSON, App Tethering, Manifest, Classes.dex, Android Monitor, Intents, FireMonkey, Deployment en nog veel meer.

Een erg leuke interactieve tweedaagse training bedoeld voor VCL developers die zo snel mogelijk aan de slag willen met Delphi Android app development.

Schrijf je in via Barnsten: http://www.barnsten.com/nl/events/details?events_id=98

Delphi Android SDE 6 juni 2014

Op de Software Developer Event van 6 juni 2014 mag ik twee Delphi Android sessies doen.

In een case study laat ik zien hoe we een Delphi Android app hebben gebruikt om op TV schermen informatie van schepen weer te geven, vergelijkbaar met de Schiphol schermen met vertrek en aankomst. In een advanced technische sessie gaan we kijken naar debuggen, loggen en tracen  van een Delphi Android applicatie, waarvoor we zelfs een de in Delphi beschikbare Android SDK functies uitbreiden.

Jeroen Pluimers laat op hetzelfde event zien hoe je met Unit Testing je code reproduceerbaar correct houdt. Pawel Glowacki laat de nieuwste features zien van Delphi XE6 inclusief mijn persoonlijke favoriet App Tethering.

Developer Direct Live XE6 – 13 mei 2014

Zo snel mogelijk aan de slag met de nieuwe features van XE6 of gewoon geïnteresseerd in Scrum. Op deze dag laat Pawel Glowacki alles zien van XE6, waaronder App Tethering, maar wordt ook Scrum met Delphi gepresenteerd.

Meer info op: http://www.barnsten.com/nl/events/details?events_id=92

Wil je als beginnend ontwikkelaar serieus aan de slag met Delphi? Kom dan naar de Delphi Essentials VCL training op 14, 15 en 16 mei: http://www.barnsten.com/nl/events/details?events_id=95

Delphi XE6

De leukste nieuwe feature van Delphi XE6 is App Tethering, het opvallendste de nieuwe look van de IDE en het belangrijkste de gefixte bugs en eigenaardigheden van de vorige versie.

I’ve modified the code for auto-starting a Delphi App on Android after Boot for compatibility with XE6. As all steps are basically the same the new zip file is just appended on the end of the article here: Auto start Delphi XE6 Android App after boot