Announcement

Collapse
No announcement yet.

unterschiedliche Grafikformate über TDBImage/TImage anzeigen/auswählen und in Interbase-DB ablegen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • unterschiedliche Grafikformate über TDBImage/TImage anzeigen/auswählen und in Interbase-DB ablegen

    Hallo Leute,

    Ich muss die Möglichkeit schaffen, Fotos der JPeg-,BMP- und GIF-Formate auszuwählen und in einem Interbase-Blob abzulegen.
    Doch irgendwie durchschaue ich das Prinzip nicht so ganz. Die bisherigen ähnlichen Beispiele aus dem Forum haben mir auch nicht weitergeholfen - ebensowenig die Delphi-Handbücher.

    Wenn ich nur auf *.bmp-Dateien zugreife, habe ich keinerlei Schwierigkeiten. Doch immer wenn ich ein anderes Format nehme, wird mir beim Blättern durch den Datenbestand der Fehler 'Bitmap ist ungültig' angezeigt. Auch, wenn ich versuche, von TDBImage auf TImage auszuweichen und über LoadFromStream/SaveToStream die entsprechenden Felder fülle. Wie muss ich vorgehen, um die unterschiedlichen Grafikformate hierbei zu verwalten???

    Würde mich über Hilfe sehr freuen

    Gruß, Heike

  • #2
    Hallo Heike,<br><br>
    DBImage und Image können BMP und JPG. Wenn du JPG anzeigen willst mußt du die Unit <B>jpeg</B> zusätzlich einbinden!<br><br>
    Der Interbaseblob muß ein Binärblob sein kein Textblob!<br>
    Beispiel für Bitmap:
    <p>
    stream:=TmemoryStream.create;><br>
    aImage.Picture.bitmap.SaveToStream(stream);><br>
    stream.position:=0;><br>
    TBlobField( qry.FieldByName( 'GRAFIK' )).LoadFromStream( stream );><br>><br>
    </p>
    Beispiel für JPeg:
    <p>
    aImage.Picture.Graphic.SaveToStream(stream);
    </p>
    <br><Br>
    Carste

    Comment


    • #3
      Hallo Carsten,

      Danke für den Hinweis! Allerdings geht es mir ja zusätzlich auch um Gif-Dateien. Wie kann ich am einfachsten vorgehen, alle drei Formate zu verwalten? Bzw. Wie kann ich alle intern als ein gemeinsames Format (z. B. Bmp) in der Datenbank ablegen? Gibt es eine Möglichkeit, beliebige Grafikformate in ein gemeinsames umzuwandeln? Möglichst ohne Zwischenspeicherung auf der Festplatte...

      Kann mir da jemand weiterhelfen???

      Heik

      Comment


      • #4
        Hallo,

        das Problem liegt darin, dass <b>TImage</b> für die unterschiedlichen Grafikformat unterschiedliche Zugriffswege zur Verfügung stellt. Soll zum Beispiel ein Icon (*.ICO) aus der Datenbank ausgelesen und angezeigt werden, könnte man so vorgehen:
        <pre>
        aStream := TBlobStream.Create(TableIconICON as TBlobField, bmRead);
        try
        ImageDB.Picture.Icon.LoadFromStream(aStream);
        finally
        aStream.Free;
        end;
        </pre>
        Wenn in der Datenbank <b>zusätzlich</b> zu den reinen BLOb-Daten der Grafik eine weitere Spalte mit einem eigenen Kennzeichner des Grafik-Typs (BMP, JPG, ICO etc.) untergebracht wird, könnte das Programm beim Auslesen der BLOb-Daten auch die unterschiedlichen Anzeigevarianten für <b>TImage.Picture</b> (Bitmap, Graphic, Icon) berücksichtigen

        Comment


        • #5
          Hallo Heike,

          mal abgesehen von den Zugriffsproblemen, die Karsten und Andeas bereits gelöst haben: Dein Problem ist weniger ein Datenbank-Problem, Du willst auf Bildformate zugreifen, die Delphi nativ nicht unterstützt (wenn's um Photos geht, denke ich mal ist GIF durch die nur 256 unterstützten Paletten-Farben nicht das Ende, dann benötigst Du sicher auch TIFF oder PNG).

          Dazu gibt es entweder kommerzielle Komponenten (z.B. ImageLib, ImageMan) oder Du schaust Dich mal nach freien Komponenten um. Eine sehr gute Einstiegsseite ist dann sie Seite von Earl Flynn unter
          http://www.efg2.com/Lab/Library/Delphi/Graphics/Default.htm
          und dann File Formats und Conversion.

          Viel Glück beim Suchen!

          Ul

          Comment


          • #6
            Hallo Uli,

            Danke für die Web-Adresse. Dort habe ich wirklich das gefunden, was ich suchte.

            Gruß, Heik

            Comment

            Working...
            X