2016-06-07 5 views
0

Я положил два сплошных круга (фигуры) на форму, изменил их цвета и передвинул их. Когда я нахожу их в нужное положение, я хочу захватить полноцветное изображение формы и как можно быстрее поместить ее в массив. Как я могу это сделать?Поместить изображение формы в массив (VB .net)

Вот как я рисую объекты: Я получаю OvalShape от VB PowerPacks в VB2010Express и рисую его как круг на форме. После этого, я настроить его в коде:

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 

Вот что я пытался с DrawToBitmap (копируется большая часть его от переполнения стека): Button1.Click мое добавление.

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- копи-LANG = 1 & CS-LANG = VB # кода сниппет-1). –

+0

Спасибо @VisualVincent. Я имею в виду, что хочу захватить образ формы И фигуры, как они появляются на форме. Я предполагаю, что ваше предложение получает изображение в растровое изображение, и оттуда я должен поместить битмап в массив - я думаю, что могу это сделать, но сначала растровое изображение. У меня есть строка: Me.DrawToBitmap (bm, New Rectangle (0,0, wid, hgt)) со всем объявленным, а затем я сохраняю файл, который оказывается крошечным и не отображается в Photoshop. Размеры 240x320, поэтому файл должен быть больше 11 байт. В Интернете должно быть миллион примеров этого, я просто их не нашел. –

+0

Я понял, что вы этого хотели. 'DrawToBitmap()' будет делать трюк в некоторых случаях, но фактический ответ на ваш вопрос отличается в зависимости от того, как вы рисуете фигуры. Было бы лучше, если бы вы показали нам свой код. Что касается вашей попытки, вы не указали, как объявлены переменные 'wid' и' hgt', а также как сохранить приведенный растровый рисунок. Измените свой вопрос, чтобы указать подробности (предпочтительно код) о том, как вы рисуете свои фигуры, а также ваши попытки, используя 'DrawToBitmap()'. –

ответ

0

По какой-то причине, растровые изображения появились на моем диске сегодня, но не вчера. Единственное, что я сделал в то же время, - это выключить компьютер и перезагрузить компьютер. Странно, что Bmps не читаются Photoshop, Photoshop Elements или фоторедактором Win10, но они отображаются в виде значков в диалоговом окне диска. Вероятно, проблема с заголовком. Я думаю, что мне хорошо идти со следующим шагом поместить bmp в массив для последующего поиска. Благодарю. Я очень благодарен за ваш быстрый ответ.

+0

Нет проблем. Если вы хотите изображение формы без рамки, которую вы можете прикрепить, заполните панель в форме и поместите все в нее. Затем вы просто рисуете растровое изображение всей панели. –

+0

Что касается проблемы с открытием изображений, попробуйте указать формат при сохранении. Например: 'bm2.Save (" E: \ rhtempsave \ bm2.bmp ", System.Drawing.Imaging.ImageFormat.Bmp)'. Если это не работает, попробуйте PNG. –

+0

Наконец, массивы на самом деле не так уж плохи. Просто объявите массив: 'Dim Images (2 - 1) Как битмап« Массив, содержащий 2 битовых карты », затем установите в нем растровое изображение:« Изображения (0) = bm2' ** ('0' - первый элемент в массив, '1' - второй и т. д.) **. Вы также можете рассмотреть [** Список (Of T) **] (https://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) .aspx), если вы добавляя неограниченное количество изображений. Список работает аналогично массиву, но он будет автоматически изменяться по размеру, когда вы добавите больше элементов (сделанных с помощью 'YourList.Add (bm2)'). –