Сохранение изображений в байтовый массив в формате JPEG

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
Foks
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.06.2008 (Сб) 18:36

Сохранение изображений в байтовый массив в формате JPEG

Сообщение Foks » 14.06.2008 (Сб) 18:48

Код: Выделить всё
Public Declare Function GdiplusStartup Lib "GDIPlus" (token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Public Declare Function GdiplusShutdown Lib "GDIPlus" (ByVal token As Long) As Long
Public Declare Function GdipCreateBitmapFromHBITMAP Lib "GDIPlus" (ByVal hbm As Long, ByVal hpal As Long, Bitmap As Long) As Long
Public Declare Function GdipDisposeImage Lib "GDIPlus" (ByVal Image As Long) As Long
Public Declare Function GdipSaveImageToFile Lib "GDIPlus" (ByVal Image As Long, ByVal filename As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Public Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long


Public Sub SaveJPG( _
   ByVal pict As StdPicture, _
   ByVal filename As String, _
   Optional ByVal quality As Byte = 80)
Dim tSI As GdiplusStartupInput
Dim lRes As Long
Dim lGDIP As Long
Dim lBitmap As Long
   tSI.GdiplusVersion = 1
   lRes = GdiplusStartup(lGDIP, tSI)
   If lRes = 0 Then
      lRes = GdipCreateBitmapFromHBITMAP(pict.Handle, 0, lBitmap)
      If lRes = 0 Then
         Dim tJpgEncoder As GUID
         Dim tParams As EncoderParameters
         CLSIDFromString StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), _
                         tJpgEncoder
         tParams.Count = 1
         With tParams.Parameter
            CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB3505E7EB}"), .GUID
            .NumberOfValues = 1
            .type = 1
            .Value = VarPtr(quality)
         End With
         lRes = GdipSaveImageToFile( _
                  lBitmap, _
                  StrPtr(filename), _
                  tJpgEncoder, _
                  tParams)
         GdipDisposeImage lBitmap
      End If
      GdiplusShutdown lGDIP
   End If
   If lRes Then
      Err.Raise 5, , "Cannot save the image. GDI+ Error:" & lRes
   End If
End Sub


Здесь приведен код для сохранения изображения в файл формата JPEG с помощью GDI+. Затем изображение формата JPEG нужно быстро передать в сеть, но читать его из файла слишком долго. Как можно сохранить изображение в байтовый массив?

Кодировать JPEG на лету самостоятельно будет очень медленно (VB нам здесь не товарищ), а хочется, чтобы весь проект был написан на VB.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4147
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.06.2008 (Сб) 19:17

Foks
http://bbs.vbstreets.ru/viewtopic.php?t ... highlight=
Кодирование в JPEG средствами VB. И скорости хватает.

Foks
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 14.06.2008 (Сб) 18:36

Сообщение Foks » 14.06.2008 (Сб) 19:55

Mikle писал(а):Foks
http://bbs.vbstreets.ru/viewtopic.php?t ... highlight=
Кодирование в JPEG средствами VB. И скорости хватает.


Большое спасибо, буду пробывать ;)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Сохранение изображений в байтовый массив в формате JPEG

Сообщение Andrey Fedorov » 10.02.2009 (Вт) 9:16

Foks писал(а):Кодировать JPEG на лету самостоятельно будет очень медленно (VB нам здесь не товарищ), а хочется, чтобы весь проект был написан на VB.

То есть нужно обойтись без промежуточного сохранения в файл?

Посмотри здесь исходники: viewtopic.php?f=28&t=31865
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

    TopList