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

Delphi XE4 iOS Quickstart

Nu Delphi XE4 uit is wil je natuurlijk zo snel mogelijk aan de slag. Dit heb je nodig:

  1. Delphi XE4
  2. Mac met XCode 4.6
  3. iPhone of iPad
  4. iOS Developer Program

Delphi XE4 draait onder Windows, een Virtual Machine op een Mac kan ook. Voor het code signing, zodat je naar een fysieke iPhone/iPad toe mag, heb je toch een Mac nodig. Mocht je al een Mac hebben, voor iOS 6.x ontwikkeling moet je OSX Lion (10.7) of Mountain Lion (10.8) draaien. Deze versies werken alleen op 64-bit Intel Macs. Hierop installeer je dan XCode 4.6 met de command-line utilities. Wil je naar een iPhone/iPad deployen, dan heb je behalve het apparaat zelf ook een iOS Developer licentie nodig. Met die licentie mag je trouwens dan ook je App in de shop verkopen.

Wil je alleen even proberen hoe het werkt? Dan heb je genoeg aan een x86-64 Intel Mac met de gratis XCode. Delphi kan namelijk ook compileren naar de XCode simulator. Download hier de Delphi trial en je kunt direct aan de slag.
Update: ook zonder echte Mac kun je testen en wel via Mac In Cloud. Voor nieuwe en bestaande XE4 users is er een voordelige trial op http://edn.embarcadero.com/article/43181 beschikbaar tot 15 juli 2013.

Delphi XE4

Delphi XE4 is net uit. Nieuw in deze versie is real native iOS ondersteuning. Je kunt nu met één source (Delphi Pascal) en één framework (FireMonkey) naar drie platformen; Windows, Mac OSX en iOS (iPhone, iPad). One source to rule them all! Delphi compileert je eigen Delphi pascal code naar een ARM Mach-O binary als je ontwikkelt voor iOS. Hiermee haal je alle mogelijke snelheid uit je iPhone of iPad, enerzijds door real native compilatie naar machinecode, anderzijds door de OpenGL accelerated user interface elementen van FireMonkey. Voor diegenen die eerder gewerkt hebben met XE2, compilatie vindt dus niet meer plaats via XCode, alleen code-signing wordt nog door XCode gedaan. Ook nieuw in deze versie is FireDac, de opvolger voor DBExpress.