Как получить заголовок Bitmap и его размер в памяти?! - VB
Формулировка задачи:
Есть загруженный битмапа в памяти, они находятся в контексте (DC). Как мне получить заголовок BITMAPINFOHEADER для этого битмап?! Как правильно посчитать размер занимаемый им в памяти?!
Вот приблизительный код, то есть ради примера о битмапах которые создаю и загружаю:
(Внимание код написан только для примера!!)
Листинг программы
- 'Первый контекст
- Public mDC As Long
- Public mBMP As Long, iBMP As Long
- Public iBG As StdPicture, hBG As Long
- 'Test - это форма!!!
- mDC = CreateCompatibleDC(Test.hdc)
- mBMP = CreateCompatibleBitmap(Test.hdc, 3000, 3000)' Необходимо узнать РАЗМЕР а памяти!!!
- iBMP = SelectObject(mDC, mBMP)
- 'Второй контекст
- Set iBG = LoadPicture(App.Path + "\bg.jpg") ' Необходимо узнать РАЗМЕР в памяти!!!
- hBG = CreateCompatibleDC(Test.hdc)
- SelectObject hBG, iBG.Handle
- 'Копирую
- BitBlt mDC, 0, 0, 2000, 2000, hBG, 0, 0, SRCCOPY
- BitBlt Test.hdc, 0, 0, 1024, 768, mDC, 0, 0, SRCCOPY
Один битмап создается с помощью CreateCompitableBitmap, а второй грузится через LoadPicture. Мне необходимо посчитать размер для каждого из них. Как правильно это сделать?!
Решение задачи: «Как получить заголовок Bitmap и его размер в памяти?!»
textual
Листинг программы
- Option Explicit
- Private Type BITMAPINFOHEADER
- 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 BITMAP
- bmType As Long
- bmWidth As Long
- bmHeight As Long
- bmWidthBytes As Long
- bmPlanes As Integer
- bmBitsPixel As Integer
- bmBits As Long
- End Type
- Private Type DIBSECTION
- dsBm As BITMAP
- dsBmih As BITMAPINFOHEADER
- dsBitfields(2) As Long
- dshSection As Long
- dsOffset As Long
- End Type
- Private Declare Function GetObject Lib "gdi32" _
- Alias "GetObjectA" ( _
- ByVal hObject As Long, _
- ByVal nCount As Long, _
- ByRef lpObject As Any) As Long
- Private Sub Form_Load()
- Dim tBitmap As BITMAP
- Dim tDib As DIBSECTION
- GetObject Picture1.Picture.Handle, Len(tBitmap), tBitmap
- GetObject Picture1.Picture.Handle, Len(tDib), tDib
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д