AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

External: SIGEGV bei Rect()

Ein Thema von F1r3man · begonnen am 6. Dez 2016 · letzter Beitrag vom 7. Dez 2016
Antwort Antwort
F1r3man

Registriert seit: 8. Nov 2016
8 Beiträge
 
#1

External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 21:03
Delphi-Version: 5
Hallöchen, ich habe ein kleines Problem:
ich kriege hier eine Exception: >>External: SIGSEGV<<
In Datei 'kennzeichenfinden.pas' in Zeile 178: DST:= Rect(0, 0, img.Width, img.Height);

ich werde nicht wirklich schlau aus dem fehler. währe nice, wenn ihr mir helfen könntet.
Vielen dank schon einmal im Vorraus.

Hier der betroffene Code-teil:
Delphi-Quellcode:
function TKennzeichenFinden.start (Pfad: String): TBitmap;
var
  img: TBitmap;
  kanten: TBitmap;
  blaueflaeche: TBitmap;
  width, height, i, j: Integer;
  DstRect, SrcRect: TRect;
  filterRad: integer;
begin
  filterRad:= 3;
  DstRect:= Rect.(0, 0, img.Width, img.Height);
  img.LoadFromFile(Pfad);
  kanten.Create;
  kanten.setSize(img.Width, img.Height);
  blaueflaeche.Create;
  blaueflaeche.setSize(img.Width, img.Height);
  kanten:= findeKanten(img, filterRad, 200, kanten);
  blaueflaeche:= findeBlau(img, filterRad, blaueflaeche);
  for i:=filterRad to img.Width-filterRad-1 do
  begin
    for j:=filterRad to img.Height-filterRad-1 do
    begin
      if(isObenLinks(kanten, i, j, 3) AND hatBlaueFlaeche(blaueflaeche, i, j, 3)) then
      begin
        SrcRect:= Rect(i, j, 300, 200);
        Result.Canvas.CopyMode:= cmSrcCopy;
        Result.Canvas.CopyRect(dstRect, img.Canvas, SrcRect);
        break;
      end;
    end;
  end;
end;
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 21:46
Wo wird img denn erstellt? Fehlt da nicht irgendwo ein  img := TBitmap.Create; Gilt auch für die anderen Bitmaps. Und am Ende das Freigeben nicht vergessen.
  Mit Zitat antworten Zitat
F1r3man

Registriert seit: 8. Nov 2016
8 Beiträge
 
#3

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 21:57
ist mir eben auch aufgefallen, habs behoben, aber der Fehler bleibt gleich. ist auch aufgetreten, wenn ich das über eine Schleife mache, also ohne 'Rect'.

neuer Quelltext
Delphi-Quellcode:
begin
  filterRad:= 3;
  durchschnitt:= (filterRad*2)-1;
  DstRect:= Rect(0, 0, img.Width, img.Height);
  img.Create;
  img.LoadFromFile(Pfad);
  kanten.Create;
  kanten.setSize(img.Width, img.Height);
  blaueflaeche.Create;
  blaueflaeche.setSize(img.Width, img.Height);
  kanten:= findeKanten(img, filterRad, 200, kanten);
  blaueflaeche:= findeBlau(img, filterRad, blaueflaeche);
  for x:=filterRad to img.Width-filterRad-1 do
  begin
    for y:=filterRad to img.Height-filterRad-1 do
    begin
      if(isObenLinks(kanten, x, y, 3) AND hatBlaueFlaeche(blaueflaeche, x, y, 3)) then
      begin
        SrcRect:= Rect(x, y, 300, 200);
        Result.Canvas.CopyMode:= cmSrcCopy;
        Result.Canvas.CopyRect(dstRect, img.Canvas, SrcRect);
        break;
      end;
    end;
  end;
end;

Geändert von F1r3man ( 6. Dez 2016 um 22:01 Uhr)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 22:11
Siehst Du den Unterschied zwischen meinem img := TBitmap.Create; und Deinem img.Create; ? Und das Create muss natürlich vor dem ersten Zugriff auf img stehen.
  Mit Zitat antworten Zitat
F1r3man

Registriert seit: 8. Nov 2016
8 Beiträge
 
#5

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 22:17
ups xD mein Fehler, aber das ist ja nicht einmal der Fehler den ich habe, der Fehler liegt laut Debugger bei dem DstRect:= Rect(0, 0, img.Width, img.Height).
auch nachdem ich das andere angepasst habe.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: External: SIGEGV bei Rect()

  Alt 6. Dez 2016, 22:27
Wo steht denn jetzt das Create, immer noch hinter der vom Debugger bemängelten Zeile?

Ohne Gewähr für irgendwas:
Delphi-Quellcode:
begin
  img := TImage.Create;
  kanten := TImage.Create;
  blaueflaeche := TImage.Create;
  filterRad := 3;
  durchschnitt := (filterRad * 2) - 1;
  img.LoadFromFile(Pfad);
  DstRect := Rect(0, 0, img.Width, img.Height);
  kanten.setSize(img.Width, img.Height);
  blaueflaeche.setSize(img.Width, img.Height);
  kanten := findeKanten(img, filterRad, 200, kanten); // <- wie sieht denn diese Funktion aus, was hat sie für 'nen Rückgabewert?
  blaueflaeche := findeBlau(img, filterRad, blaueflaeche);
  for x := filterRad to img.Width - filterRad - 1 do
  begin
    for y := filterRad to img.Height - filterRad - 1 do
    begin
      if (isObenLinks(kanten, x, y, 3) AND hatBlaueFlaeche(blaueflaeche, x, y, 3)) then
      begin
        SrcRect := Rect(x, y, 300, 200);
        Result.Canvas.CopyMode := cmSrcCopy;
        Result.Canvas.CopyRect(dstRect, img.Canvas, SrcRect);
        break;
      end;
    end;
  end;
  FreeAndNil(img);
  FreeAndNil(kanten);
  FreeAndNil(blaueflaeche);
end;
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz