Entwickler-Ecke

Multimedia / Grafik - SW Bitmap "scannen" und in xy Bereiche zerlegen


rotalosi - Di 15.11.16 16:04
Titel: SW Bitmap "scannen" und in xy Bereiche zerlegen
Hallo,

heute muss ich etwas weiter ausholen um zu beschreiben welches Problem ich habe.

Ich habe eine (sehr alte) Maschine mit der man Vektorgrafiken im HPGL Format und auch Bitmaps (Nur Schwarz-Weiß) in Metall fräsen(gravieren) kann geerbt. :D
Ich habe mir eine Steuerung mit einem AVR gebaut. Diese Steuerung erwartet immer (Über USB) eine XY Position und ob der Fräskopf bei der Bewegung unten oder oben sein soll. Dazu habe ich eine Delphi Programm geschrieben, dass diese Daten aus einer *.plt Datei extrahiert und an die Steuerung schickt. Das funktioniert jetzt einwandfrei.

Nun wollte ich (wie in der defekten Original Steuerung) ein Schwarz-Weiß Bitmap fräsen. Aber da komme ich nicht weiter.

In der Originalsteuerung funktionierte das so: Je nach gewähltem Fräskopf wurde die X-Achse in festen Schrittgrößen vorwärts bewegt. Auf der Y-Achse wurde der Fräskopf auf das Metall gesenkt, solange die Bitmap an der entsprechenden Position schwarz war.

Mein erster Gedanke war einfach an den entsprechenden XY Punkten aus der Bitmap die Farben auszulesen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        for x:=0 to bild.Width -1 do
          begin
            for y:=0 to bild.Height -1 do
              begin
                color :=bild.Canvas.Pixels[x,y];
                List.Add('X = '+inttostr(x)+ ' Y = '+inttostr(y)+' Color = '+inttostr(color));
              end;
          end;

Das klappt aber nicht gescheit. Selbst bei einem kleinen Bild sind das zu viele Bildpunkte. Wenn ich nur jede 4 oder 5 Zeile nehme verliere ich Bildinformationen.

Ich finde einfach keinen praktikablen Ansatz. Hat jemand eine Idee wie ich sowas umsetzen könnte?

Gruß Frank


jasocul - Di 15.11.16 16:28

Da du nur nach einem Ansatz fragst:

Stimmt die Bild-Auslösung mit der Auflösung der Fräsmaschine überein?
Falls nicht, solltest du vielleicht vor der Übertragung das Bitmap in die richtige Auflösung umwandeln.


t.roller - Di 15.11.16 18:30

Warum so umständlich?
Ich hätte einen Universal-Plotter-Treiber auf einem WINDOWS-PC installiert und getestet, was die Maschine mit den HPGL-Daten damit macht.
Wenn das Ergebnis nicht zufriedenstellend ist: Solange Grafik in einem Grafik-Programm ändern, bis es passt.

Kleiner Tipp: Zum Testen einen Paraffinblock nehmen...


rotalosi - Mi 16.11.16 09:50

@t.roller
Warum so umständlich?

Weil ich ein Programm schreiben will das die Maschine ansteuert.
Sicherlich gäbe es viele andere Möglichkeiten, aber bestimmt würde ich da nicht in einem Entwicklerforum nach fragen. Es geht ja darum das ich im Programm eine Bitmap öffne und diese interpretiere und an die Maschine übergebe.

@jascoul
Das versuche ich jetzt gerade. Ist aber nicht ganz so einfach. Die rein "elektronische" Auflösung, also die Punkte die die Schrittmotoren ansteuern können unterscheidet sich ja sehr deutlich von der mechanischen Auflösung, die durch den Gravierkopf vorgegeben wird. Ich denke aber das dies der richtige Weg ist.