Страница: 1 |
Страница: 1 |
Вопрос: Массив и Image (PictureBox)
Добавлено: 29.12.07 03:11
Автор вопроса: Abriel
Здравствуйте!
Подскажите, каким образом вставить изображение в Image или Picture Box, которое считано (или находиться) в байтовом массиве. При этом предварительно не записывая массив в файл изображения на жесткий диск?
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #1
Добавлено: 29.12.07 03:57
Private Declare Function SetDIBitsToDevice Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal dx As Long, ByVal dy As Long, ByVal SrcX As Long, ByVal SrcY As Long, ByVal Scan As Long, ByVal NumScans As Long, Bits As Any, BitsInfo As BITMAPINFO, ByVal wUsage As Long) As Long
Номер ответа: 2
Автор ответа:
Abriel
Вопросов: 9
Ответов: 12
Профиль | | #2
Добавлено: 30.12.07 05:13
Вроде и примеры есть по использованию этой функции... а никак не получаеться. VB 6.0 использую. Интересно, может как-то получилось бы через буфер обмена? Хотя без API никуда... Может найдется добрый человек, который наглядно продемонстрировал бы, есть такие?
Номер ответа: 3
Автор ответа:
Abriel
Вопросов: 9
Ответов: 12
Профиль | | #3
Добавлено: 30.12.07 05:27
Хотя в принцыпе, в элементов Image и PictureBox есть свойства DataField, DataFormat, DataSource и др.
Номер ответа: 4
Автор ответа:
Winand
Вопросов: 87
Ответов: 2795
Web-сайт:
Профиль | | #4
Добавлено: 30.12.07 13:50
Код открывает bmp файл в байтовый массив, получает инфу о файле и в соответствие с ней SetDIBitsToDevice рисует картинку
Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
Private Type BITMAPFILEHEADER '14 bytes
bfType As String * 2 '"magic cookie" - must be "BM"
bfSize As Long
bfReserved1 As Integer
bfReserved2 As Integer
bfOffBits As Long
End Type
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors() As Long 'array of RGBQUADs
End Type
Public Function BMPFillInfoStruct(ByVal filename As String) As Boolean
Dim bmih As BITMAPINFOHEADER, hfile As Long, bfh As BITMAPFILEHEADER
Dim BMi As BITMAPINFO
Dim WritePos As Long
Dim FileDat() As Byte
hfile = FreeFile()
'On Error Resume Next
ReDim FileDat(FileLen(filename) - 54)
Open filename For Binary Access Read As #hfile
Get #hfile, , bfh
Get #hfile, 15, BMi.bmiHeader 'start at the 15th byte
Get #hfile, 55, FileDat
Close #hfile 'Close file
Call SetDIBitsToDevice(Picture1.hdc, 0, 0, BMi.bmiHeader.biWidth, BMi.bmiHeader.biHeight, 0, 0, 0, BMi.bmiHeader.biHeight, FileDat(0), BMi, 0)
Picture1.Refresh
BMPFillInfoStruct = True 'indicate success
End Function
Private Sub Command1_Click()
BMPFillInfoStruct "G:\Мои документы\Мои рисунки\VectorCell2DesktopWallpaper.bmp"
End Sub
Номер ответа: 5
Автор ответа:
Abriel
Вопросов: 9
Ответов: 12
Профиль | | #5
Добавлено: 31.12.07 00:38
Благодарю Winand, чудесный пример! С наступающим НГ!