PictureBoxen zusammensetzen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von ThePlexian.

    PictureBoxen zusammensetzen

    Hi,

    ist es möglich 16 PictureBoxen (Beispielsweise) zu einem Bild zusammenzusetzen? Und wenn ja, wie? (Code wäre nützlich)

    Und dieses Bild am Ende abzuspeichern halt.

    LG


    Verschoben nach sonstige Problemstellungen
    -Artentus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()

    Willkommen im Forum. :thumbup:

    crashoverride schrieb:

    ist es möglich ... ?
    Ja.
    Allerdings nur unter der Voraussetzung, dass Du mit PictureBoxen deren Image-Property meinst. ;)
    Mach Dir eine Bitmap mit der Um-Fläche aller Images.
    Hol Dir von dieser ein Graphics-Object.
    Mach eine Schleife über alle Source-Images.
    Male sie an die richtige Position im Target-Image. Dazu musst Du Dir die richtige Überladung von Graphics.DrawImage(...) auswählen.
    Und erfreue uns mit Deinem Code, den wir gern gemeinsam zum Laufen bringen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie soll man die PictureBoxen zusammenstellen können?

    Quellcode

    1. Dim pb = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8, PictureBox9, PictureBox10, PictureBox11, PictureBox12, PictureBox13, PictureBox14, PictureBox15, PictureBox16, PictureBox17, PictureBox18, PictureBox19, PictureBox20, PictureBox21, PictureBox22, PictureBox23, PictureBox24, PictureBox25, PictureBox26, PictureBox27, PictureBox32, PictureBox33, PictureBox34, PictureBox35, PictureBox36, PictureBox37, PictureBox38, PictureBox39, PictureBox40, PictureBox41, PictureBox42, PictureBox43, PictureBox44, PictureBox45, PictureBox46, PictureBox47, PictureBox48, PictureBox49, PictureBox50, PictureBox51, PictureBox52, PictureBox53, PictureBox54, PictureBox55, PictureBox56, PictureBox57, PictureBox58, PictureBox59, PictureBox60, PictureBox61, PictureBox62, PictureBox63, PictureBox64}
    2. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    3. SFD.ShowDialog()
    4. End Sub
    5. Private Sub SFD_FileOk(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles SFD.FileOk
    6. Timer1.Start()
    7. End Sub
    8. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    9. pb.Image.Save(SFD.FileName + ".Png", System.Drawing.Imaging.ImageFormat.Png)
    10. Timer1.Stop()
    11. End Sub


    Habe die BackColor der PictureBoxen zum testen verändert, aber der Code ist ja eigentlich komplett falsch, da er jedes einzelne abspeichern würde, mit dem Zeichnen der PictureBox würde ich kein Problem haben, hab mir den Code dafür schon zusammengewürfelt.

    Ebenso ist der Code sehr lang mit den PictureBoxen, mir fällt nicht ein wie ich das verkürzen könnte.
    Moin,

    der Code geht ja mal gar nicht. ;)
    1. Du hast 64 PictureBoxen, ein klarer Designfehler, wenn man so viele Controls hat. Was hast Du vor?
    2. Benenne Deine Controls richtig und guidelinekonform, ich glaube kaum, dass Du sowas nach einer gewissen Zeit noch auseinanderhalten kannst und dann musste von vorne beginnen, glaub' mir.
    3. SFD ist btw auch kein konformer Name, ein guter wäre dann saveFileDialog oder zumindest sfd.
    4. Du solltest das DialogResult von der Show-Methode abfragen und nur dann so reagieren, denn sonst wird das auch beim Abbrechen ausgeführt.
    5. SaveFileDialog bzw. die Klasse FileDialog, von der diese erbt, implementiert IDisposable, d. h. Du solltest den Dialog disposen/freigeben, wenn Du ihn nicht mehr brauchst, um Speicherlecks zu verhindern. Das machst Du einfach mit .Dispose oder indem Du die Instanzvariable einfach in einem Using-Block deklarierst.
    6. Du brauchst absolut keinen Timer, wozu auch? Einfach das DialogResult abfragen und dann reagieren. Muss es immer ein Timer sein?
    7. Path.Combine benutzen, außerdem ist SFD.FileName + ".Png" unnötig, da die Extension schon im FileName dabei ist und Du 2. png so oder so klein schreiben müsstest, wenn dann.
    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    crashoverride schrieb:

    mir fällt nicht ein wie ich das verkürzen könnte.
    Versuche diesen Post zu verstehen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hmmm.. bin jetzt nicht so der erfahrenste Programmierer, eigentlich war meine Frage ja nur ob es möglich ist, mit googlen wird es wohl nicht möglich sein ...

    Hab nämlich eigentlich ein größeres Projekt vorgehabt, aber das ist eben die Stelle wo ich nicht weiter komme, bräuchte halt nun die Code-Hilfe, da ich das Projekt im Showroom irgendwann gern präsentiert hätte.

    LG
    @crashoverrideUnd wann mache ich Deine Hausaufgaben in Geschichte?
    ----
    Vielleicht bringst Du zunächst mal was eigenes auf die Beine. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo crashoverride,

    64 Pictureboxen sind eine falsche Herangehensweise, um etwas Grafisches darzustellen.
    Um dir also bei deinem Problem helfen zu können, solltest du zunächst erwähnen, was du vorhast, dann können wir dir eine effektivere Methode nennen, um diese ganzen Pictureboxen zu ersetzen und deine Bilder am Ende zusammenzufügen.
    Eigentlich hatte ich nicht vor, PictureBoxen zusammen zusetzen, nur dachte ich, das es anders nicht möglich ist, und zwar so wie Paint, wenn man da ein neues Blatt anlegt, kann man ja die Größe bestimmen... und ich hätte gerne eine große PictureBox in der Form ungefähr 128x128, nur soll jeder Pixel 16x16 groß sein den ich darauf zeichne. Insgesamt soll es aber als 16x16 Bild abgespeichert werden, wenn ihr versteht wie ichs mein...

    @RodFromGermany

    Du hast ja Recht... nur fällt mir das programmieren Anfangs sehr schwer, mit dem Designing hab ich mich gut zurecht gefunden, das Coden fällt mir nur nicht so leicht und vielleicht kriege ich ja ein bisschen Unterstützung.

    LG

    crashoverride schrieb:

    vielleicht kriege ich ja ein bisschen Unterstützung.
    Sehr gerne, jedoch nicht mit fertigem Code (jedenfalls bei mir).
    Ich leite Dich mit präzisen Fragen / Hinweisen und dann läuft das, und Du hast es verstanden. :thumbsup:
    Wenn Du ein C&P-Künstler werden willst, fände ich das nicht in Ordnung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    crashoverride schrieb:

    in der Form ungefähr 128x128, nur soll jeder Pixel 16x16 groß sein
    Guck dir mal LED-Matrix an.
    Das ist zwar was ganz anneres als Images und Bitmaps, aber man hat eine Menge Quadrate, die man gezielt färben kann.

    Das schwierige an solchen Sachen ist ja nicht eiglich, eine Bitmap anzuzeigen, sondern, sich eine benutzbare Oberfläche dafür auszudenken.

    Im übrigen denke ich, dass du dich restlos überforderst, wenn du als Anfänger eine Art Paint-Programm schreiben willst.
    @ErfinderDesRades

    Habe mir gerade die eine Test-Datei von dir heruntergeladen, genauso ist es eigentlich wie ich es haben möchte, insgesamt soll der das alles abspeichern als Pixelbild. Ich versuch ein bisschen herumzuprobieren, da es ja nicht auf der Datenbank gespeichert werden soll, sondern als .bmp oder .png

    Hilfe wäre dazu wieder nützlich :thumbsup:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „crashoverride“ ()

    Habe mir meinen Code jetzt erstellt, was komplett anders ist, aber soweit funktioniert, nur muss es größer dargestellt werden, kein Mensch kann 16x16 so klein bezeichnen, aber ansonsten ist alles so wie ich es will. Habe das Projekt mal angehangen, wenn ich mit dem Mausrad zoome, verändert sich nur die PictureBox Größe, ich möchte aber das sich die Pixel Größe auch mit zoomt und am Ende als 16x16 abgespeichert wird.
    Dateien
    • Zoom Test.zip

      (76,37 kB, 145 mal heruntergeladen, zuletzt: )

    crashoverride schrieb:

    Noch jemand hier?
    Klar.
    Was genau soll passieren?
    Halte ein Bild in Originalgröße und ein weiteres Bild in Anzeigegröße vorrätig.
    In Deiner Mouse-Rad-Routine musst Du das Anzeige-Bild neu skalieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    mir ist das zu schwierig, eine 16*16 Bitmap auf groß zu ziehen, und es dann so hinzucoden, dass die Mausklicks auf die vergrößerte Darstellung letztendlich in der original-kleinen Bitmap an der richtigen Stelle landen.

    Ich hab das lieber mittm DatagridView, da kriege ich im Event gesagt, in welche Zeile und Spalte geklickst wurde.

    Bzw. brauch ich garnet, denn das DGV selektiert die geklickste Zelle ja bereits selbst.

    crashoverride schrieb:

    Button in der PictureBox
    nicht, wohl aber in einer kommunizierenden Bitmap, die Du dann der PictureBox als Image zuweist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!