Autor Beitrag
tk_123
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 30.10.08 16:17 
Hallo Leute,

nach langem Googeln, wälzen eines Visual C# Buches und suchen in der hiesingen Suchfunktion wende ich mich an euch, da ich nicht mehr weiter komme.


Zur Vorgeschichte:

Ich programmiere mit einem Freund ein Programm in C# das über eine Kamera ein schwarzes Objekt auf einem Weißem Blatt Papier erkennt und die Koordinaten des Objektes via RS232 an einen µ-Controller sendet.
Dieser µ-Controller steuert dann eine 3-Achs-Vorrichtung an, ähnlich einer CNC-Fräße, nur das die Fräße hier ein Magnet ist. Dieser Magnet wird dann halt zu dem Objekt auf dem Papier gesteuert und hebt es auf.

Soweit ist eigentlich alles im Endspurt.
Das µ-Controller Programm läuft, eine Relyplatine wurde entworfen geääzt usw.

Das einzige Problem ist noch im C# Programm.

Das Programm macht eine Aufnahme von dem weißem Blatt Papier und speichert diese Aufnahme in einer Picturebox. Der RGB-Wert jedes Pixcels wird in einem Array abgespeichert.
Nun legt man das Objekt auf das Blatt, das Programm macht eine weitere Aufnahme und vergleicht die RGB-Werte jedes Pixcels mit dem im Array, und findet so heraus wo sich im bild etwas verändert hat.
Doch taucht, wenn ich das programm mehrmals durchlaufen lasse ein "accessviolationexception"-Fehler auf. Und zwar wahlweiße an der Stelle "GetPixel" bzw. "picturebox.refresh()".

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
private void suchen()
    {
        //Deklariation
        Bitmap BM1;
        Color Farbe;
        bool lv_rv;
        byte r_wert, g_wert, b_wert;
        int x, y, lfd_nr, x_anzahl, y_anzahl, haeufigkeit;

        //Initaialisieren
        BM1 = (Bitmap)pictureBox1.Image;
        Farbe = new Color();
        lv_rv = false;
        r_wert = 0;
        g_wert = 0;
        b_wert = 0;
        lfd_nr = 0;
        x_anzahl = 0;
        y_anzahl = 0;
        haeufigkeit = 0;
        numud_gitter.Minimum = 1;
        numud_gitter.Maximum = 10;
        numud_sense.Minimum = 10;
        numud_sense.Maximum = 100;
        numud_sense.Increment = 10;
        pb_mod.Minimum = 1;
        pb_mod.Maximum = (int)(80000 / (numud_gitter.Value * numud_gitter.Value));

        for(y = 1; y <= pictureBox1.Height - 1; y = y + (int)(numud_gitter.Value))
        {
            for (x = 1; x <= pictureBox1.Width - 1; x = x + (int)(numud_gitter.Value))
            {
                Farbe = new Color();

                Farbe = BM1.GetPixel(x, y);   //RGB des Aktuellen Pixel auslesen

                r_wert = Farbe.R;
                g_wert = Farbe.G;
                b_wert = Farbe.B;

                if (((r_wert + g_wert + b_wert) < (r_werte[lfd_nr] + g_werte[lfd_nr] + b_werte[lfd_nr] - numud_sense.Value)) | ((r_wert + g_wert + b_wert) > (r_werte[lfd_nr] + g_werte[lfd_nr] + b_werte[lfd_nr] + numud_sense.Value)))
                {
<span style="color: red">                    BM1.SetPixel(x, y, Color.Red);</span>
                }
                lfd_nr++;
            }      
        }

        pictureBox1.Refresh();

        MessageBox.Show("Analyse erfolgreich abgeschlossen! " + haeufigkeit + " Pixel wurden verändert.");
    }


Vielen Dank, im Vorraus für eure Hilfe.
tk_123 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 02.11.08 21:18 
mh,
mir scheint meine Frage zu anspruchsvoll für das Forum hier.

Bei den ganzen anderen Threads sind auch nicht oft keine Antworten,
hier fehlen ein paar Leute die richtige Anhung davon haben.

Naja vielen Dank.
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: So 02.11.08 21:41 
verwendest du multithreading?
abgesehen davon wer eine genaue fehlermeldung interessant
weil nur mit "accessviolation" fängt man nicht viel an...
tk_123 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 03.11.08 21:23 
AccessViolationException

Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.