powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертация из PictureBox в JPEG
3 сообщений из 3, страница 1 из 1
Конвертация из PictureBox в JPEG
    #37168629
djande
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток! Задача такая: есть Picture1, в нём картинка, её нужно преобразовать в JPEG и сохранить в файл. Проблема возникла с преобразованием из hDC в Bitmap, то есть, если в первом параметре функции GdipCreateBitmapFromHBITMAP указать Picture1.Picture.Handle, то всё работает так, как надо, но мне надо реализовать это на чистом API и поэтому я попробовал получить первый параметр функции GdipCreateBitmapFromHBITMAP через GetCurrentObject(Picture1.hdc, OBJ_BITMAP), в итоге в файле получается картинка всей моей формы, а мне нужно преобразованное в JPEG изображение, находящееся в Picture1, а не вся форма, подскажите пожалуйста, что я не так сделал?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
Option Explicit

Private Type GdiplusStartupInput
GdiplusVersion As Long
DebugEventCallback As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs As Long
End Type

Private Type GdiplusStartupOutput
NotificationHook As Long
NotificationUnhook As Long
End Type

Private Type GUID
data1 As Long
data2 As Integer
data3 As Integer
data4( 0  To  7 ) As Byte
End Type

Private Type EncoderParameter
GUID As GUID
NumberOfValues As Long
Type As Long
Value As Long
End Type

Private Type EncoderParameters
count As Long
Parameter As EncoderParameter
End Type

Private Const OBJ_BITMAP =  7 
Private Const EncoderParameterValueTypeLong =  4 

Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal FileName As Long, hImage As Long) As Long
Private Declare Function GdiplusStartup Lib "gdiplus" (token As Long, inputbuf As GdiplusStartupInput, outputbuf As GdiplusStartupOutput) As Long
Private Declare Function GdiplusShutdown Lib "gdiplus" (ByVal token As Long) As Long
Private Declare Function GdipCreateBitmapFromHBITMAP Lib "gdiplus" (ByVal hbm As Long, ByVal hpal As Long, bitmap As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As Long
Private Declare Function GdipSaveImageToFile Lib "gdiplus" (ByVal image As Long, ByVal FileName As Long, clsidEncoder As GUID, encoderParams As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal str As Long, id As GUID) As Long
Private Declare Function GetCurrentObject Lib "gdi32" (ByVal hdc As Long, ByVal uObjectType As Long) As Long

Private Sub Command1_Click()

Dim gdiSI As GdiplusStartupInput
Dim gdiSO As GdiplusStartupOutput
Dim lGDIP As Long
Dim lBitmap As Long
Dim hBitmap As Long
Dim TParams As EncoderParameters
Dim encoderCLSID As GUID
Dim tDC As Long
Dim m_hDC As Long

gdiSI.GdiplusVersion =  1 

Call GdiplusStartup(lGDIP, gdiSI, gdiSO)

hBitmap = GetCurrentObject(Picture1.hdc, OBJ_BITMAP)

Call GdipCreateBitmapFromHBITMAP(hBitmap,  0 , lBitmap)

Call CLSIDFromString(StrPtr("{557CF401-1A04-11D3-9A73-0000F81EF32E}"), encoderCLSID)

TParams.count =  1 

With TParams.Parameter
Call CLSIDFromString(StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), .GUID)
.NumberOfValues =  1 
.Type = EncoderParameterValueTypeLong
.Value = VarPtr( 10 )
End With

Call GdipSaveImageToFile(lBitmap, StrPtr(App.Path & "\lBmp.jpg"), encoderCLSID, TParams)

Call GdipDisposeImage(lBitmap)
Call GdiplusShutdown(lGDIP)

End Sub
...
Рейтинг: 0 / 0
Конвертация из PictureBox в JPEG
    #37172691
djande,

Image Property .
...
Рейтинг: 0 / 0
Конвертация из PictureBox в JPEG
    #37602672
DemSergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim gdipBitmap As Long
Dim hDCMem As Long, hBmpMem As Long, hBmpMemOld As Long
hDCMem = CreateCompatibleDC(Picture1.hDC)
hBmpMem = CreateCompatibleBitmap(hDCMem, cX, cY)
hBmpMemOld = SelectObject(hDCMem, hBmpMem)

BitBlt hDCMem, 0, 0, cX, cY, Picture1.hDC, 0, 0, SRCCOPY

GdipCreateBitmapFromHBITMAP hBmpMem, 0, gdipBitmap

SelectObject hDCMem, hBmpMemOld
DeleteObject hBmpMem
DeleteDC hDCMem
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Конвертация из PictureBox в JPEG
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]