Автор вопроса: Vit | Web-сайт:www.home-soft.jino-net.ru
Проблема:
В VB встроена возможность чтения форматов JPG,GIF. Как сделать так, чтобы я имел возможность записи в эти форматы?
SavePicture записывает только в формате BMP.
У менять есть пример для работы с рисунками, в том числе с возможностью, но:
- пример громоздкий;
- не всегда срабатывает (особенно при DEBUG'е программы, а потом и вообще)
Этот пример использует Microsoft'ские файлы с реализациями этих алгоритмов и к ним нужно обращаться через адреса функций. А это не всегда срабатывает так, как нужно.
Использовать функции как API-функции не получится:
Declare Function ...
Вопрос:
Как реализовать возможность преобразования в форматы JPG,GIF. Если нет таких способов, то, может быть у кого-нибудь найдутся алгоритмы JPG-сжатия, точнее матрицы преобразования? Их несколько вариаций (каждая фирма реализует собственные).
Вопрос к AlexF и тем кто ещё, когда-либо использовал библиотеку SAVTOJPG.DLL?
Его функции:
Private Declare Sub Bmp2Jpg Lib "savtojpg.dll" (ByVal FileName1 As String, ByVal FileName2 As String)
Private Declare Sub SaveToJpg1 Lib "savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, ByVal Height As Long, ByVal Width As Long)
Private Declare Sub SaveToJpg2 Lib "savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, ByVal Height As Long, ByVal Width As Long)
На счёт SaveToJpg2 не уверен, но ошибок, по крайней мере, не было. Мне важно узнать значение первого параметра из SaveToJpg1
ByVal hgd As Long
.
Я перебрал все возможные вариатнты (свойства PictureBox):
- Picture
- hDC
- Image
Но результата не было. Хотя, при использовании hDC в выходной файл перекидывался снимок текущего изображения на экране с некоторым смещением. Но это не то. В остальных случаях в выходном файле оказывается "белая картина".
Что должно передаваться в качестве первого параметра этой функции?
Функция SaveToJpg1 .
Эта процедура сохраняет графику, находящуюся в формах, PictureBox-ах и других графических компонентов.
Объявление процедуры (VB):
Private Declare Sub SaveToJpg1 Lib "c:\savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, _
ByVal Height As Long, ByVal Width As Long)
Параметры:
Hgd - описатель графического устройства (Например Picture1.HDc)
FileName - имя файла
Height, Width - размеры картинки в поинтах.
Функция SaveToJpg2 .
Эта процедура сохраняет графику, находящуюся в формах, PictureBox-ах и других графических компонентов.
Объявление процедуры:
Private Declare Sub SaveToJpg2 Lib "c:\savtojpg.dll" (ByVal hWind As Long, ByVal FileName_
As String, ByVal Height As Long, ByVal Width As Long)
Параметры:
HWind - описатель окна (например Picture1.HWnd)
FileName - имя файла
Height, Width - размеры картинки в поинтах.
Функция Bmp2Jpg.
Эта процедура пребразует файл BMP в JPG.
Объявление процедуры:
Private Declare Sub Lib "c:\savtojpg.dll" (ByVal f1 As String, ByVal f2 As String)
Параметры:
F1 - Имя файла BMP
F2 - Имя файла JPG
Пример использования.
'Допустим у нас на форме есть командная кнопка и PictureBox
'В разделе Declaration модуля формы.
Private Declare Sub SaveToJpg1 Lib "c:\savtojpg.dll" (ByVal hgd As Long, ByVal FileName As String, _
ByVal Height As Long, ByVal Width As Long)
Private Declare Sub SaveToJpg2 Lib "c:\savtojpg.dll" (ByVal hWind As Long, ByVal FileName_
As String, ByVal Height As Long, ByVal Width As Long)
Private Declare Sub Lib "c:\savtojpg.dll" (ByVal f1 As String, ByVal f2 As String)
'Реакция на какое-нибудь событие , например - нажатие кнопки.
Private Sub Command1_Click
'Сохраняем содержимое PictureBox'a
SaveToJpg1 (Picture1.HDc, "c:\hello.jpg", picture1.ScaleHeight, Picture1.ScaleWidth)
'Сохраняем содержимое рабочего стола
SaveToJpg2 (0, "c:\desktop.jpg",800,600)
'Преобразовываем картинку BMP в JPG
Bmp2Jpg ("MyBMP.bmp","MyJPG.jpg"
Всё, проблема решена.
Я нашёл исходники, переписал на С++, добавил пару новых функций.
Короче, если кто захочет скачать, то можете сделать это с http://www.home-soft.land.ru/programs/vav/JPG.rar