2016-06-07 12 views
0

Ich füge zwei feste Kreise (Formen) auf ein Formular, ändere ihre Farben und verschiebe sie. Wenn ich sie in die richtige Position bringe, möchte ich das Vollfarbbild des Formulars erfassen und es so schnell wie möglich in ein Array einfügen. Wie kann ich das machen?Formularbild in Array setzen (VB .net)

Hier ist, wie ich die Objekte zeichnen: Ich bekomme ein OvalShape von VB PowerPacks in VB2010Express und zeichnen es als ein Kreis auf dem Formular. Danach, stelle ich es im Code:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    OccultSize1 = 100 
    OccultSize2 = 50 
    OvalShape1.Width = OccultSize1 
    OvalShape1.Height = OccultSize1 
    OvalShape2.Width = OccultSize2 
    OvalShape2.Height = OccultSize2 
    OvalShape1.Left() = 155 - OvalShape1.Width/2 
    OvalShape1.Top() = 153 - OvalShape1.Height/2 
    OvalShape2.Left() = 155 - OvalShape2.Width/2 
    OvalShape2.Top = 85 'temporary 
    OvalShape1.FillColor = Color.Yellow 
    OvalShape1.BorderColor = Color.Yellow 
    OvalShape2.FillColor = Color.Blue 
    OvalShape2.BorderColor = OvalShape2.FillColor 
    Label1.Text = "100" 
    Label2.Text = "50" 
    Label3.Text = "xxx" 
    tbHue.Value = OvalShape2.FillColor.GetHue 
    RadioButton1.Checked = False 
    RadioButton2.Checked = True 
    LineShape1.Visible = False 
    LineShape2.Visible = True 
    OvalShape3.Visible = False 
    End Sub 

Hier ist, was ich mit DrawToBitmap versucht haben (die meisten davon aus Stack-Überlauf kopiert): Button1.Click meine Addition ist.

Private Function GetFormImage(ByRef GetBitmap As String) As Bitmap 
    ' Make the bitmap. 
    Dim wid As Integer = Me.Width 
    Dim hgt As Integer = Me.Height 
    Dim bm As New Bitmap(wid, hgt) 
    ' Draw the form onto the bitmap. 
    Me.DrawToBitmap(bm, New Rectangle(0, 0, wid, hgt)) 
    bm.Save("E:\rhtempsave\bm.bmp") 
    ' Make a smaller bitmap without borders. 
    wid = 240 'Me.ClientSize.Width 
    hgt = 320 'Me.ClientSize.Height 
    Dim bm2 As New Bitmap(wid, hgt) 
    ' Get the offset from the window's corner to its client 
    ' area's corner. 
    Dim pt As New Point(0, 0) 
    pt = PointToScreen(pt) 
    Dim dx As Integer = 37 'pt.X - Me.Left 
    Dim dy As Integer = 10 'pt.Y - Me.Top 
    ' Copy the part of the original bitmap that we want 
    ' into the bitmap. 
    Dim gr As Graphics = Graphics.FromImage(bm2) 
    gr.DrawImage(bm, 0, 0, New Rectangle(dx, dy, wid, hgt), _ 
     GraphicsUnit.Pixel) 
    bm2.Save("E:\rhtempsave\bm2.bmp") 
    Return bm2 
End Function 

This is bm2.

+0

[** Control.DrawToBitmap **] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.drawtobitmap (v = vs.110) .aspx? Cs- save-lang = 1 und cs-lang = vb # code-snippet-1). –

+0

Danke @VisualVincent. Ich meine, ich möchte das Bild der Form und die Formen, wie sie auf dem Formular erscheinen, erfassen. Ich nehme an, Ihr Vorschlag holt das Bild in eine Bitmap und von dort muss ich die Bitmap in ein Array setzen - ich denke ich kann das, aber zuerst die Bitmap. Ich habe eine Zeile: Me.DrawToBitmap (bm, Neues Rechteck (0,0, wid, hgt)) mit allem deklariert und dann speichere ich die Datei, die sich als winzig und nicht sichtbar in Photoshop. Abmessungen sind 240x320, also sollte die Datei größer als 11 Bytes sein. Es muss eine Million Beispiele dafür im Internet geben, ich habe sie einfach nicht gefunden. –

+0

Ich habe verstanden, dass Sie das wollten. 'DrawToBitmap()' funktioniert in einigen Fällen, aber die tatsächliche Antwort auf Ihre Frage hängt davon ab, wie Sie die Formen zeichnen. Es wäre am besten, wenn Sie uns Ihren Code zeigen würden. Was Ihren Versuch angeht, haben Sie nicht gezeigt, wie die Variablen 'wid' und' hgt' deklariert werden, noch wie Sie die resultierende Bitmap speichern. Bitte bearbeiten Sie Ihre Frage, um Details (vorzugsweise Code) über das Zeichnen Ihrer Formen und Ihre Versuche mit 'DrawToBitmap()' einzufügen. –

Antwort

0

Aus irgendeinem Grund schien die Bitmaps auf meiner Festplatte heute, aber nicht von gestern. Das Einzige, was ich in der Zwischenzeit getan habe, war das Herunterfahren und Neustarten meines Computers. Seltsamerweise sind die BMPs von Photoshop, Photoshop Elements oder Win10s Foto-Lesegeräten nicht lesbar, aber sie erscheinen als Icons im Dateidialog. Wahrscheinlich ein Header-Problem. Ich denke, ich bin gut, um mit dem nächsten Schritt zu gehen, den bmp in ein Array für späteres Zurückholen zu setzen. Vielen Dank. Ich bin sehr dankbar für Ihre schnelle Antwort.

+0

Kein Problem. Wenn Sie ein Bild des Formulars ohne den Rahmen möchten, können Sie ein Panel im Formular andocken und stattdessen alles in das Formular einfügen. Dann zeichnen Sie einfach eine Bitmap des gesamten Panels. –

+0

Was Ihr Problem beim Öffnen der Bilder angeht, versuchen Sie, das Format beim Speichern anzugeben. Zum Beispiel: 'bm2.Save (" E: \ rhtempsave \ bm2.bmp ", System.Drawing.Imaging.ImageFormat.Bmp)'. Wenn das nicht funktioniert, versuchen Sie stattdessen PNG. –

+0

Schließlich sind Arrays eigentlich gar nicht so schwer. Deklarieren Sie einfach ein Array: 'Dim Images (2 - 1) Als Bitmap 'Ein Array mit 2 Bitmaps.' Setzen Sie dann ein Bitmap:' Images (0) = bm2' ** ('0' ist das erste Element in der Array, '1' ist die zweite und so weiter) **. Sie können auch eine [** Liste (Of T) **] (https://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) .aspx) in Betracht ziehen, wenn Sie es sind werde eine unbestimmte Anzahl von Bildern hinzufügen. Eine Liste funktioniert ähnlich wie ein Array, aber sie wird sich automatisch anpassen, wenn Sie weitere Elemente hinzufügen (über 'YourList.Add (bm2)'). –