Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 12:15 Titel: absturz mit POINT oder Array |
|
|
ich hab ein Grafikpuffer erstellt aus dem ich mit Point die roten Pixel auslesen möchte. mit ein paar tests hab ich gemerkt das das auch geht aber nicht immer. entweder schmiert das prog sofort ab oder nach einigen pixelprüfungen. bremse ich den code mit sleep und gedrückter taste aus, stürzt das prog immer bei zeile 3 und spalte 29 ab.
betreffende stelle ist die unterste doppelte for-next
Code: | Imgtxt = Imagecreate(360, 9)
Draw string Imgtxt, (1, 1), "hier der text", &haa0000
For i = 1 To 60 '8
With mycube(i).crd
Read .x,.y,.z
End With
Next
Dim As Single winkel=Atn(1)*4/180 'PI=Atn(1)*4 , PI/15 => 12° (15 * 2 = 30 schritte)
Type kreispunkte360
nxk AS Integer
nyk AS Integer
END Type
DIM kp(360) AS kreispunkte360
for i = 1 to 360
kp(i).nxk = (0 + 50 * cos(i*winkel)) / 50
kp(i).nyk = (0 + 50 * sin(i*winkel)) / 50
next
hoehenk = .06
for i = 1 to 9
for j = 1 to 360
IF Point (j, i, Imgtxt)= 11141120 then
ij += 1
With mycube(ij).crd
.x = kp(j).nxk
.y = kp(j).nyk
.z = hoehenk
End With
END IF
next j
hoehenk -= .02
next i
ImageDestroy Imgtxt
|
|
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 06.03.2013, 12:20 Titel: |
|
|
imagecreate(360,9) geht von 0 bis 359 und 0 bis 8... _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 12:24 Titel: |
|
|
ok. aber wieso läuft er dann 2x bis 360 durch und schmiert dann erst in zeile 3 bei spalte 29 ab - wenn ich ein sleep hinter dem ersten next habe sonst halt früher oder gar sofort.
EDIT
hmm hab das draw string imgtxt jetzt auf 0,0 gesetzt und
FOR i = 0 to 8
und
FOR j = 0 to 359
schmiert sofort ab
Zuletzt bearbeitet von braesident am 06.03.2013, 12:28, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 06.03.2013, 12:27 Titel: |
|
|
Es kann auch 100x gut gehen und dann greifst Du auf einen Geschützen Speicherbereich zu und BUMS alles schmiert ab... _________________
 |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 06.03.2013, 12:37 Titel: |
|
|
Hast Du auch einen Screen initialisiert bevor Du Imagecreate benutzt?
Code: | screenres 800,600,32
Dim Imgtxt as any ptr = Imagecreate(360, 9)
Draw string Imgtxt, (0, 0), "hier der text", &hAA0000 'X (13*8=104) x Y (8)
for i as Integer = 0 to 8
for j as Integer = 0 to 359
IF Point(j, i, Imgtxt) = &hAA0000 then
pset(100+j,100+i),&hFFFFFF
END IF
next j
next i
ImageDestroy Imgtxt
sleep
|
Ansonsten würd ich auch deine anderen Arrays mal überprüfen...
ggf mal mit -exx kompilieren... _________________
 |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 17:35 Titel: |
|
|
Screenres ist im moment 800, 500, 32
-exx probier ich nachher gleich aus , hab gerade noch nen bissel zu tun |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 19:58 Titel: |
|
|
also ich habs mit -exx probiert - prog schließt sofort wieder und es gibt keine fehlermeldung. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 06.03.2013, 20:02 Titel: |
|
|
Zitat: | und es gibt keine fehlermeldung |
Starte das Programm mal von der Konsole aus. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 20:23 Titel: |
|
|
meinst du in der FBIde mit F5 - das mach ich die ganze Zeit. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 06.03.2013, 20:40 Titel: |
|
|
Keine Ahnung, was FBIDE genau macht - ich glaube aber nicht, dass es dir diese Möglichkeit bietet. Starte mal die Windows-Konsole und rufe das Programm von dort aus auf. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 06.03.2013, 21:01 Titel: |
|
|
da sagt er mir:
Aborting due to runtime error 6 (out of bounds array accsess) at line 319
zeile 319
Code: | With mycube(ij).crd
|
Code: | for i = 0 to 8
for j = 0 to 359
IF Point (j, i, Imgtxt)= 11141120 then
ij += 1
With mycube(ij).crd
.x = kp(j+1).nxk
.y = kp(j+1).nyk
.z = hoehenk
End With
END IF
next j
hoehenk -= .02
next i
|
Der Hauptquellcode stammt von TJF aus dem Portal 3D ohne Libs |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 06.03.2013, 21:06 Titel: |
|
|
braesident hat Folgendes geschrieben: | wieso läuft er dann 2x bis 360 durch und schmiert dann erst in zeile 3 bei spalte 29 ab |
wie ist denn mycube(ij).crd dimensioniert?
Nach deiner Aussage schmiert es bei ij=749 ab?
EDIT
genau -> out of bounds array accsess _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 07.03.2013, 00:06 Titel: |
|
|
der startwert von ij sollte 60 sein, da mycube bis 60 mit den eckdaten des rohen objekts gefüllt wird.
Code: | DIM SHared AS Integer ij = 60
Imgtxt = Imagecreate(360, 9)
Draw string Imgtxt, (1, 1), "hier der text", &haa0000
For i = 1 To 60 '8
With mycube(i).crd
Read .x,.y,.z
End With
Next
|
ij soll jetzt immer um 1 erhöht werden wenn im Img ein roter Pixel gefunden wird.
Code: | hoehenk = .06
for i = 0 to 8
for j = 0 to 359
IF Point (j, i, Imgtxt)= 11141120 then
ij += 1
With mycube(ij).crd
.x = kp(j+1).nxk
.y = kp(j+1).nyk
.z = hoehenk
End With
END IF
next j
hoehenk -= .02
next i
|
EDIT/
aber die frage war trotzdem die richtige
ij war zwar nur bis 93 gekommen und nicht wie angenommen bis 749, aber totzdem schon viel zu hoch
Code: | Dim Shared mycube(86) As vert |
|
|
Nach oben |
|
 |
|