External SIGSEV bei Bitmap.LoadFromFile

Für Probleme bezüglich Grafik, Audio, GL, ACS, ...
Antworten
flamefire
Beiträge: 7
Registriert: Mi 17. Dez 2008, 09:13

External SIGSEV bei Bitmap.LoadFromFile

Beitrag von flamefire »

Ich bekomme den o.g. Fehler bei einer Konsolen-Anwendung

Code: Alles auswählen

program myApp;
 
{$mode objfpc}{$H+}
{$DEFINE GTK1}
{$DEFINE UNIX}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, SysUtils, CustApp,Graphics,LCLIntf,Dialogs,IntfGraphics
  { you can add units after this };
 
type
 
  { Tprog }
 
  Tprog = class(TCustomApplication)
  protected
    procedure DoRun; override;
  public
  end;
 
{ Tprog }
 
procedure Tprog.DoRun;
var
  s:String;
  bm:TJPEGImage;
  pt:TPoint;
  Image:TLazIntfImage;
begin
 
  s:=self.Params[1];
  bm:=TJPEGImage.Create;
  try
    bm.LoadFromFile(s);//Hier!
  except
  end;
  Image:=bm.CreateIntfImage;
  writeln('OK');
  SetLength(s,0);
 
  // stop program loop
  Terminate;
end;
 
var
  Application: Tprog;
begin
  Application:=Tprog.Create(nil);
  Application.Title:='Hallo';
  Application.Run;
  Application.Free;
end.
Die markierte Coezeile ist eine mit dem Widgetset
Der Fehler lässt sich (theoretisch) beheben, durch Einbinden der "interfaces" unit
Nur leider kann ich meine konsolen-anwendung dann nicht mehr unter GTK1 compilieren weil anscheinend die Definition {$DEF GTK1} nicht global gesetzt ist und er dadurch bei den compilerswitches versucht, nicht-GTK-funktionen einzubinden
z.b. "gdk_image_unref" in der GTKDebug.pp (ist in einem {$ifndef GTK1} switch !!!)

Komme ich mit Grafiken (jpg laden) auch ohne interfaces aus?
wenn nicht, wie bekomme ich den fehler weg?

Benutzeravatar
theo
Beiträge: 10882
Registriert: Mo 11. Sep 2006, 19:01

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von theo »

Wofür brauchst du bei einer Konsolenanwendung GTK?

flamefire
Beiträge: 7
Registriert: Mi 17. Dez 2008, 09:13

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von flamefire »

gar nicht...aber iwas musste ich ja auswählen...
BTW: es hat gerade geklappt: in den projeckoptionen "LCL" als abhängigkeit einfügen

Benutzeravatar
theo
Beiträge: 10882
Registriert: Mo 11. Sep 2006, 19:01

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von theo »

Ist aber trotzdem nicht ideal.
Mach einfach: Neues Projekt -> Programm.

Die Widgetset unabhängigen Grafikfunktionen findest du in fpImage etc.

Irgendwie so:

Code: Alles auswählen

var img:TFPMemoryImage;
pngw: TFPWriterPNG;
begin
 
img:=TFPMemoryImage.create(1,1);
img.LoadFromFile('/home/theo/test.bmp');
 
pngw:=TFPWriterPNG.Create;
img.SaveToFile('/home/theo/teste.png',pngw);
pngw.free;

flamefire
Beiträge: 7
Registriert: Mi 17. Dez 2008, 09:13

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von flamefire »

hmm...dann müsste ich mein projekt umschreiben
was ich machen muss: jpg grafik laden (aus datei); höhe/breite ermitteln; einzelne pixelwerte (nur einen wert des RGB-Tripels je Pixel benötigt) ermitteln
wie würde das ohne widgetset gehen?

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von pluto »

warum nutzt du nicht OpBitmap ? Das müsste sowas doch auch können, oder ?

edit:
ist TBitmap widgetset abhäng ?
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10882
Registriert: Mo 11. Sep 2006, 19:01

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von theo »

Ja das könnte er machen.
TBitmap ist WS abhängig, OpBitmap an sich nicht. Das Package wiederum schon, wegen lazbridge.
Er muss einfach das Verzeichnis einbinden und die nötigen units benutzen.

flamefire
Beiträge: 7
Registriert: Mi 17. Dez 2008, 09:13

Re: External SIGSEV bei Bitmap.LoadFromFile

Beitrag von flamefire »

hab es schon...
dank dem post von theo:

Code: Alles auswählen

FImg:=TFPMemoryImage.create(0, 0);
  FImgReader:=TFPReaderJPEG.Create;
  FImg.UsePalette:=false;
  FImg.LoadFromFile(s, FImgReader);
und der rest ist der gleiche zugriff wie bei tlazintfimage
brauchte also nur die LCL zu löschen und die typen zu ersetzen

Es funktioniert also jz alles und das programm ist süße 263KB groß =)
Vielen Dank

Antworten