PNG Bilddatei in SQLite speichern

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
lumpi
Beiträge: 9
Registriert: Di 2. Okt 2007, 16:46

PNG Bilddatei in SQLite speichern

Beitrag von lumpi »

Ich möchte gerne unter Linux eine PNG Datei in eine SQLite Datenbank speichern.
Dazu habe ich mir aus einigen Beispielen folgendes Programm (ohne GUI) gebastelt.

Leider erhalte ich aber folgenden Error.
An unhandled exception occurred at $00414BE9 :
PNGImageException : Too many colors to use indexed PNG color type
$00414BE9
$00410CB1


Hat jemand einen Rat für mich, wie ich das beheben könnte.

Code: Alles auswählen

program Project1;
 
{$mode objfpc}{$H+}
 
uses FPImage,FPReadpng,FPWritepng,sqlite3conn,strings,db,SysUtils,sqldb,
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { add your units here };
 
var bm: TStream;
    h, w, i: integer;
    d:Pchar;
    s:string;
    FImg: TFPMemoryImage;
    FImgReader: TFPReaderpng;
    FImgwriter: TFPWriterpng;
    Sql: String;
    sqlconn :TSQLConnection;
    sqltrans:TSQLTransaction;
    sqlquery:TSQLQuery;
begin
         FImg:=TFPMemoryImage.create(256, 256);
         FImgReader:=TFPReaderPNG.Create;
         FImg.LoadFromFile('test.png', FImgReader);
         begin
              bm:=TMemorystream.Create;
              FImgWriter := TFPWriterPng.Create;
              FImg.SaveToStream(bm,FImgWriter);
              bm.Position:=0;
              for i := 1 to bm.Size do
               begin
                 bm.Read(d, 1);
                 s := s + d;
               end;
         end;
 
         SQLConn := TSQLite3Connection.Create(nil);
         SQLConn.DatabaseName := 'test.db';
         SQLTrans := TSQLTransaction.Create(nil);
         SQLQuery := TSQLQuery.Create(nil);
 
         Writeln('Opening database');
         SQLConn.Open;
         SQLQuery.Transaction := SQLTrans;
         SQLQuery.DataBase := SQLConn;
 
         SQLQuery.Open;
         SQLQuery.SQL.Text:='insert into Tourizm (Photo) values (:Photo)';
         //SQLQuery.Params.ParamByName('Photo').AsBlob:=s;
         Writeln('Execting Query');
         SQLQuery.ExecSQL;
         SQLTrans.Commit;
         bm.Free;
         s:='';
end.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: PNG Bilddatei in SQLite speichern

Beitrag von carli »

Wenn du eine PNG-Datei in die Datenbank hochladen willst, musst du doch bloß die Rohdaten in einen Blob stecken.

Antworten