Results 1 to 6 of 6

Thread: Ondersteuning van png/jpg in TDBImage.

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747

    Ondersteuning van png/jpg in TDBImage.

    Als het om afbeeldingen gaat, blijft Delphi een 'pain in the ass'. Zeker als het om jpg/png gaat.

    Nu blijkt dat Tokyo eindelijk formaten als jpg/png aankan met component TDBImage.
    Maar krijg dat nog steeds niet werkend. Om de afbeelding te zetten in de blobfield, maak ik gebruik van de volgende procedure:
    Delphi Code:
    1. var BlobField: TBlobField;
    2. begin
    3.   with TOpenPictureDialog.Create(nil) do
    4.   begin
    5.     try
    6.       if Execute then
    7.       begin
    8.         if fCurrentdataset.State in [dsBrowse] then
    9.           fCurrentdataset.Edit;
    10.         BlobField := fCurrentdataset.FieldByName('afbeelding') as TBlobField;
    11.         BlobField.LoadFromFile(FileName);
    12.       end;
    13.     finally
    14.       Free;
    15.     end;
    16.   end;
    Ondanks dat die formaten worden ondersteund, krijg ik het niet voor elkaar om een jpg/png afbeelding te tonen in TDBImage. Krijg alleen maar de melding 'unsuported stream format' Zelfs rechtstreeks de afbeelding in de database te plaatsen, geeft Delphi dezelfde melding als de record wordt getoond.

    Het ligt niet aan MySQL. Die kan zonde moeite het formaat opslaan.

    Iemand enig idee hoe ik dit in D10.2.2 kan oplossen?
    Delphi is great. Lazarus is more powerfull

  2. #2
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Opslaan en tonen zijn twee verschillende dingen.
    De code die je hierboven post slaat data op en heeft verder niets met weergave
    in een TDBImage te maken.

    Ik heb geen Tokyo, dus kan niet in de source kijken, maar je moet even kijken
    of de nieuwe TDBImage bij het lezen eerst de header uitleest waaraan hij kan
    zien welk TGraphic-object hij moet aanmaken.

    Wellicht, just a thought, moet je nu wel direct gebruik maken van een Image-
    veld (iets dat voorheen was voorbehouden aan een bitmaps)?
    TMemoryLeak.Create(Nil);

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Blijkbaar moet je tegenwoordig het wiel opnieuw uitvinden bij Delphi, want in de help is het moeilijk te vinden. De truuk is om vcl.imaging.pngimage toe te voegen in de uses. Dan wordt png WEL gelezen. En dan krijg je nog iets extra's. Als je gebruik maakt van TPictureDialog, komt ineens *.png tevoorschijn in de filter.
    Delphi is great. Lazarus is more powerfull

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Quote Originally Posted by jkuiper View Post
    De truuk is om vcl.imaging.pngimage toe te voegen in de uses. [...] Als je gebruik maakt van TPictureDialog, komt ineens *.png tevoorschijn in de filter.
    Erm... dat is altijd al zo geweest (met oa. JPEG en later TGIFImage).

    Onderin de grafische units (van JPEG, GIF en PNG) wordt in de initialization
    de desbetreffende klasse (en aanverwanten) in het systeem geregistreerd.

    Delphi Code:
    1. initialization
    2.   TPicture.RegisterFileFormat('GIF', sGIFImageFile, TGIFImage);  // Do not localize
    3.   CF_GIF := RegisterClipboardFormat(PChar(sGIFImageFile));
    4.   TPicture.RegisterClipboardFormat(CF_GIF, TGIFImage);
    TMemoryLeak.Create(Nil);

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,747
    Nooit iets van gemerkt
    Maar meestal maak ik gebruik van TOpendialog en een afbeelding toevoegen in een record is nu niet mijn dagelijkse bezigheid
    Delphi is great. Lazarus is more powerfull

  6. #6
    Nog mazzel dat het zo werkt. Volgens mij moest je vroeger altijd TPicture.SaveTo.... gebruiken, waarmee je niet alleen de inhoud van de afbeelding kreeg, maar ook een extra header voor Delphi zelf waarmee bij teruglezen kon worden bepaald welke TGraphic-afgeleide gebruikt moest worden. Blijkbaar is dat een stukje slimmer gemaakt. En inderdaad, de rest werkt nog steeds hetzelfde: unit toevoegen en de rest is gratis.
    1+1=b

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •