Member 11856456 Ответов: 1

Как упорядочить байтовую информацию в массиве.


На данный момент я пытаюсь упорядочить свои фотографии, которые находятся в байтах, в виде массива. Я хочу, чтобы выбранные изображения были добавлены в один и тот же ряд горизонтально. Проблема в том, что когда я настраиваю это как массив, изображения добавляются вертикально, по 1 на строку. Мне нужно, чтобы все выбранные мной изображения были добавлены в одну строку. Сам столбец не нуждается в имени.

Imports System.IO

Public Class Form1
    Dim ofd As New OpenFileDialog With {.Filter = "Images|*.jpg;*.bmp;*.png;*.gif;*.wmf"}
    Dim pic As PictureBox
    Dim wid As Int32

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        'this portion of code allows users to browse for images and add them into the group box. 
        ofd.Multiselect = True
        If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
            For Each t In ofd.FileNames
                pic = New PictureBox
                pic.Image = Image.FromFile(t)
                pic.SizeMode = PictureBoxSizeMode.StretchImage
                pic.SetBounds(wid, 20, 200, 100)
                wid += 205
                AddHandler pic.Click, AddressOf convertPic
                Me.Panel1.Controls.Add(pic)

                ' if you want to add the images straight to the form use: Me.Controls.Add(pic)

                ' this portion of code attaches the image to the picturebox
                PictureBox1.Image = pic.Image
                PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage

                ' This portion of code allows you to add pictures to the datagrid. you can use the same code to add into an sql statement.
                Using ms As MemoryStream = New MemoryStream()

                    Dim bm As Bitmap = New Bitmap(PictureBox1.Image)
                    bm.Save(ms, PictureBox1.Image.RawFormat)

                    Dim arrPic() As Byte = ms.GetBuffer()


                    DataGridView1.Columns.Add("", "")
                    DataGridView1.Rows.Add(arrPic.ToArray)


                End Using

            Next

        End If
    End Sub


Что я уже пробовал:

Я попытался составить список массивов:
Dim row As New ArrayList
                   row.Add(arrPic.ToArray)
                   DataGridView1.Rows.Add(row)


но когда я пытаюсь сделать это таким образом, байт преобразуется в системную строку s и не может быть открыт.

1 Ответов

Рейтинг:
6

Richard Deeming

Если вы позвоните Rows.Add для каждого изображения не должно быть сюрпризом, когда ваш код добавляет новую строку для каждого изображения. :)

Если вы хотите добавить все изображения в виде столбцов в одну строку, то вам нужно будет добавить одну строку и добавить изображения в эту строку.

If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
    Dim fileCount = ofd.FileNames.Length
    Dim images(fileCount - 1) As Image
    
    For i As Integer = 0 To fileCount - 1
        If i >= DataGridView1.Columns.Count Then
            Dim col As New DataGridViewImageColumn()
            col.Width = 200
            DataGridView1.Columns.Add(col)
        End If
        
        images(i) = Image.FromFile(ofd.FileNames(i))
        
        Dim pic As New PictureBox()
        pic.Image = images(i)
        pic.SizeMode = PictureBoxSizeMode.StretchImage
        pic.SetBounds(wid, 20, 200, 100)
        AddHandler pic.Click, AddressOf convertPic
        Me.Panel1.Controls.Add(pic)
        wid += 205
    Next
    
    ' NB: No point doing this in the loop, as only the last one will apply:
    PictureBox1.Image = images(fileCount - 1)
    PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    
    DataGridView1.Rows.Add(images)
End If