riesiges Bild darstellen



  • Hi!

    Ich habe hier einen Datensatz für eine Art von nc Maschine. Dieser kann als 2D Bild (linienzüge) von 65536x65536 Pixeln dargestellt werden. Dies soll nun (als Vorschau) auch geschehen und zwar scroll und zoombar. In einer späteren Version soll es dann evtl. auch Möglich gemacht werden einzelen Linien durch Click auszuwählen.

    Hat irgendjemand ene Idee für ein tragfähiges Konzept, wie man so etwas umsetzen könnte?

    Ich habe schon etwas mit PictureBox Varianten aus dem Netz rumgespielt indem ich die Ausgabe in ein Bitmap zeichnen lasse und dieses dann an eines dieser getunten PictureBox Steuerelemente übergebe, aber das ist bei der Bildgröße wohl eine (Performance-)Sackgasse.

    Die Daten liegen übrigneds in eine WrapperKlasse einer C++ verketteten Liste vor. Jedes Listenelement beherbergt eine x und eine y Koordinate sowie die Anweisung Sprung oder Schnitt und einige weitere Parameter.



  • Hi

    Wenn ich die Aufgabenstellung richtig verstanden habe, würde ich folgenden Lösungsansatz probieren:

    Zeichne nur das was gerade auch zu sehen ist.

    Bsp.: Dein Vorschaufenster ist 100100px groß.
    Bei einer Ansichtgröße der Daten von 100% entspricht dein Vorschaufenster also genau der größe von 100
    100px auf deinem "Bild".

    Jetzt gehts du Pixel für Pixel deiner Daten durch ( natürlich nur die, welche auch sichtbar sind ) und zeichnest deren Wert/Zustand in dein Vorschaufenster.

    Hoffe es war halbwegs verständlich.
    Im Grundansatz nochmal kurz: Zeichne nur den gerade sichtbaren Ausschnitt, lasse den Rest weg.

    Weitere Idee:
    Du erstellst ein Bitmap im Speicher welches genau die Größe deines sichtbaren Ausschnittes hat (bei 100% z.b 100*100px) , bei 50% dann logischerweise 200*200px.

    DAnn gehst du jeden sichtbaren Pixel durch, und zeichnest den entsprechenden Wert auf dein Bitmap im speicher.

    Und zum schluß skalierst du das Bild mittels .NET Framework auf die größe deiner Vorschaubox.

    Mfg Reinhold Fischer



  • Die Richtung scheint machbar, aber denken wir mal einen Schritt detaillierter....

    Ich würde mir also wieder eines der aufgebohrten PictureBox Steuerelemente nehmen und dieses nur noch mit Bildteilen befeuern. Das Skalieren und Scrollen würde ich dabei überschreiben (oder vielleicht besser gleich selbst ein PictureBox Child implementieren, wenn ich so drüber nachdenke) und es mit dem jeweils passenden Bitmap füttern.

    Soweit kann ich dem Ansatz folgen.

    Aber wie erstelle ich das passende Bitmap? 😕
    Ich müsste alle Elemente durchgehen und nicht nur nachprüfen, ob der Anfangs oder Endpunkt des jeweiligen Objekts im dargestellten Bildbereich liegt, sondern auch, ob die jeweils zu zeichnende Gerade vielleicht den Bildbereich schneidet, auch wenn Ihre Eckpunkte nicht im Bereich liegen.

    😞 Mal abgesehen davon, dass ich spontan nicht weiß, wie so etwas mathematisch möglich ist kann ich mir kaum vorstellen, dass sich das performant implementieren lässt.

    Also muss ich nochmals blöd fragen: Hat jemand hierfür einen Lösungsansatz im Ärmel?


Anmelden zum Antworten