Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 |

 

  Вопрос: Чтение из байтового массива в PictureBox Добавлено: 27.01.09 18:57  

Автор вопроса:  Леша | ICQ: 362231326 
Доброе время суток, уважаемые участники форума. Вопрос: на диске есть файл jpeg, который считан в байтовый массив. Каким образом можно его загрузить обратно картинкой в PictureBox? Через промежуточный файл не подходит.
Картинку читаю в массив следующим образом:
    Open Path_File For Binary As #FileNo
        ReDim Array(LOF(FileNo) - 1)
        Get #FreeNum, , Array()

    Close #FileNo
Заранее благодарен

Ответить

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

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



Вопросов: 5
Ответов: 344
 Профиль | | #1 Добавлено: 27.01.09 19:10
А как был объявлен Array, Кстати, кажется это зарезервированное слово.

Ответить

Номер ответа: 2
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #2 Добавлено: 27.01.09 19:19
Мне кажется, такое чтение в массив будет правильнее.

Dim m_Array()as Byte
Redim m_Array(FileLen(Path_File)) - 1)
Open Path_File For Binary As #FileNo
Get #FreeNo, , m_Array()

Проверить, правда, не на чем.

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 27.01.09 19:23
хм.. а к чему эти танцы с бубнами??? или ты чего то не договариваешь..
ты пишешь: на диске есть файл jpeg ... промежуточный файл не подходит
так и не надо никакого промежуточного файла.. он у тебя УЖЕ есть! просто бери его и загружай с диска.

Ответить

Номер ответа: 4
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #4
Добавлено: 27.01.09 21:58

picture1.picture = loadpicture(filename)

:)

Ответить

Номер ответа: 5
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #5 Добавлено: 30.01.09 22:05
Файл находиться на CD, оттуда читаеться в байтовый массив, обрабатываеться - как его потом показать в picturebox?

Ответить

Номер ответа: 6
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #6 Добавлено: 30.01.09 22:21
с picture1.picture = loadpicture(filepath) - то все понятно, суть вопроса остаеться в том, как показать jpeg картинку из байтового массива? Можно то этот массив загнать в промежуточный файл, выкинуть где нибудь на винте, затем загрузить именно при помощи loadfile и затем удалить, но так делать нельзя. :)

Ответить

Номер ответа: 7
Автор ответа:
 VβÐ



Вопросов: 15
Ответов: 194
 Web-сайт: www.homacosoft.com
 Профиль | | #7
Добавлено: 01.02.09 21:33
что то я не въехал-если файл лежит на сидюке, нафяга тебе нужен этот байтовый массив?

Ответить

Номер ответа: 8
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #8 Добавлено: 02.02.09 19:23
что то я не въехал-если файл лежит на сидюке, нафяга тебе нужен этот байтовый массив?

Возможно, что файл не будет в "корректном" формате jpeg, возможно, что он может быть зашифрован, разделен на части, сжат ну и так далее, а корректным, скажем так, он становиться после чтения в массив. ВОПРОС: как его из этого массива загрузить в picturebox/

Ответить

Номер ответа: 9
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #9
Добавлено: 07.02.09 20:36
Вот и вам решение этой траблы!

  1.  
  2. Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
  3. Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, ByRef riid As Byte, ppvObj As Any) As Long
  4. Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, ByRef pclsid As Byte) As Long
  5. Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
  6. Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
  7. Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
  8.  
  9. Private Function PictureFromMemory(ByRef btData() As Byte) As IPicture
  10.     Dim IID_IPicture(16) As Byte
  11.     Dim pGlobal As Long, pStream As IUnknown
  12.  
  13.     Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
  14.  
  15.     pGlobal = GlobalAlloc(0&, UBound(btData) + vbNull)
  16.     Call CopyMemory(ByVal pGlobal, btData(0), UBound(btData) + vbNull)
  17.  
  18.     If CreateStreamOnHGlobal(pGlobal, True, pStream) = 0& Then
  19.         If CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture(0)) = 0& Then
  20.             Call OleLoadPicture(ByVal ObjPtr(pStream), UBound(btData) + vbNull, False, IID_IPicture(0), PictureFromMemory)
  21.         End If
  22.     End If
  23.     If PictureFromMemory Is Nothing Then Call GlobalFree(pGlobal)
  24. End Function
  25.  
  26. Private Sub Command1_Click()
  27. Dim D() As Byte
  28. FileName = "D:\VBProjects\GAMES\Bomber\data\1.bmp"
  29. LN = FileLen(FileName)
  30. ReDim D(LN - 1)
  31. Open FileName For Binary As #1
  32.   Get #1, 1, D
  33. Close #1
  34. Form1.Picture = PictureFromMemory(D)
  35. End Sub

Ответить

Номер ответа: 10
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #10 Добавлено: 08.02.09 14:51
Большое спасибо! :)

Ответить

Номер ответа: 11
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #11 Добавлено: 11.02.09 15:43
Извращенцы мле :)


Всегда лучше подумать дважды, чем 1 раз..

Ответить

Страница: 1 |

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



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