Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Массив и Image (PictureBox) Добавлено: 29.12.07 03:11  

Автор вопроса:  Abriel
Здравствуйте!

Подскажите, каким образом вставить изображение в Image или Picture Box, которое считано (или находиться) в байтовом массиве. При этом предварительно не записывая массив в файл изображения на жесткий диск?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #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-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 30.12.07 13:50
Код открывает bmp файл в байтовый массив, получает инфу о файле и в соответствие с ней SetDIBitsToDevice рисует картинку
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

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, чудесный пример! С наступающим НГ!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам