Как получить заголовок Bitmap и его размер в памяти?! - VB

Узнай цену своей работы

Формулировка задачи:

Есть загруженный битмапа в памяти, они находятся в контексте (DC). Как мне получить заголовок BITMAPINFOHEADER для этого битмап?! Как правильно посчитать размер занимаемый им в памяти?! Вот приблизительный код, то есть ради примера о битмапах которые создаю и загружаю: (Внимание код написан только для примера!!)
Листинг программы
  1. 'Первый контекст
  2. Public mDC As Long
  3. Public mBMP As Long, iBMP As Long
  4. Public iBG As StdPicture, hBG As Long
  5. 'Test - это форма!!!
  6. mDC = CreateCompatibleDC(Test.hdc)
  7. mBMP = CreateCompatibleBitmap(Test.hdc, 3000, 3000)' Необходимо узнать РАЗМЕР а памяти!!!
  8. iBMP = SelectObject(mDC, mBMP)
  9. 'Второй контекст
  10. Set iBG = LoadPicture(App.Path + "\bg.jpg") ' Необходимо узнать РАЗМЕР в памяти!!!
  11. hBG = CreateCompatibleDC(Test.hdc)
  12. SelectObject hBG, iBG.Handle
  13. 'Копирую
  14. BitBlt mDC, 0, 0, 2000, 2000, hBG, 0, 0, SRCCOPY
  15. BitBlt Test.hdc, 0, 0, 1024, 768, mDC, 0, 0, SRCCOPY
Один битмап создается с помощью CreateCompitableBitmap, а второй грузится через LoadPicture. Мне необходимо посчитать размер для каждого из них. Как правильно это сделать?!

Решение задачи: «Как получить заголовок Bitmap и его размер в памяти?!»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Type BITMAPINFOHEADER
  4.     biSize              As Long
  5.     biWidth             As Long
  6.     biHeight            As Long
  7.     biPlanes            As Integer
  8.     biBitCount          As Integer
  9.     biCompression       As Long
  10.     biSizeImage         As Long
  11.     biXPelsPerMeter     As Long
  12.     biYPelsPerMeter     As Long
  13.     biClrUsed           As Long
  14.     biClrImportant      As Long
  15. End Type
  16. Private Type BITMAP
  17.     bmType              As Long
  18.     bmWidth             As Long
  19.     bmHeight            As Long
  20.     bmWidthBytes        As Long
  21.     bmPlanes            As Integer
  22.     bmBitsPixel         As Integer
  23.     bmBits              As Long
  24. End Type
  25. Private Type DIBSECTION
  26.     dsBm                As BITMAP
  27.     dsBmih              As BITMAPINFOHEADER
  28.     dsBitfields(2)      As Long
  29.     dshSection          As Long
  30.     dsOffset            As Long
  31. End Type
  32.  
  33. Private Declare Function GetObject Lib "gdi32" _
  34.                          Alias "GetObjectA" ( _
  35.                          ByVal hObject As Long, _
  36.                          ByVal nCount As Long, _
  37.                          ByRef lpObject As Any) As Long
  38.  
  39. Private Sub Form_Load()
  40.     Dim tBitmap As BITMAP
  41.     Dim tDib As DIBSECTION
  42.    
  43.     GetObject Picture1.Picture.Handle, Len(tBitmap), tBitmap
  44.     GetObject Picture1.Picture.Handle, Len(tDib), tDib
  45.    
  46. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.5 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы