Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65

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

16.12.2016, 19:00. Показов 2152. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть загруженный битмапа в памяти, они находятся в контексте (DC). Как мне получить заголовок BITMAPINFOHEADER для этого битмап?! Как правильно посчитать размер занимаемый им в памяти?!

Вот приблизительный код, то есть ради примера о битмапах которые создаю и загружаю:
(Внимание код написан только для примера!!)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Первый контекст
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
Добавлено через 3 минуты
Один битмап создается с помощью CreateCompitableBitmap, а второй грузится через LoadPicture. Мне необходимо посчитать размер для каждого из них. Как правильно это сделать?!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.12.2016, 19:00
Ответы с готовыми решениями:

Получить NSString из JSON и использовать его как заголовок в TableView
у меня в JSON файле есть вот такая строчка "titles of sections": мне нужно поставить каждую строку в заголовок соответствующей...

Swf файл, как получить его реальный размер swfobject
Доброго времени суток. На страничку к себе загрузил swf файл и игрой, и подключил swfobject. на кнопку повесил событие кот div в...

Как в lazarus получить размер изображения зная его расположение
Нужно сделать так что бы размеры (height, weight) компонента image соответствовали загружаемому. Проблема в том что размеры этого...

8
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
16.12.2016, 21:19
GetObject
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
17.12.2016, 08:21  [ТС]
The trick, я нашел другую Апи GetDIBits через нее можно получить заголовок BITMAPINFOHEADER.
Теперь помоги с вопросом, как правильно высчитать размер изображения, вот что я нашел в нете:

Размер = Высота*Ширина*КоличествоБайтНаКаждыйПикс ель

То есть bihHeight*biWidth*biBitCount (все переменные из BITMAPINFOHEADER) - правильно ли уравнение?
biBitCount возвращает значение в битах, а надо "БайтНаКаждыйПиксель", значит:
ByteCount=biBitCount/8??
В итоге уравнение: SizeBitmap=bihHeight*biWidth*ByteCount?? ? Что здесь не правильно???
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.12.2016, 10:41
Там есть поле biSizeImage которое равно размеру битмапа в памяти (если есть компрессия то с компрессией). Если оно равно нулю то в поле bmWidthBytes структуры BITMAP содержится размер в байтах строки развертки, который при умножении на высоту даст нужно количество байтов.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
17.12.2016, 11:12  [ТС]
The trick, я не знаю как получить(объявить я их смогу) эти структуры - BITMAPINFOHEADER и BITMAP, на примере какого нибудь рисунка.
Подскажи как это сделать, а я дальше сам код смогу написать)))

Добавлено через 2 минуты
И еще вопрос:
мое уравнение все таки верно или нет?
ByteCount=biBitCount/8
SizeBitmap=bihHeight*biWidth*ByteCount

Так я тоже получу размер. Интересно просто узнать несколько вариантов)))

Добавлено через 7 минут

Не по теме:

Не по теме:
Как обстоят дела с вбстрит, форум поднимут снова?! Или все безвозратно утеряно?!

0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.12.2016, 17:59
Лучший ответ Сообщение было отмечено Don Leno как решение

Решение

Цитата Сообщение от Don Leno Посмотреть сообщение
The trick, я не знаю как получить(объявить я их смогу) эти структуры - BITMAPINFOHEADER и BITMAP, на примере какого нибудь рисунка.
Подскажи как это сделать, а я дальше сам код смогу написать)))
Visual Basic
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
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
Цитата Сообщение от Don Leno Посмотреть сообщение
мое уравнение все таки верно или нет?
Нет, там должно быть выравнивание каждой строки на границу DWORD.

Не по теме:

Цитата Сообщение от Don Leno Посмотреть сообщение
Как обстоят дела с вбстрит, форум поднимут снова?! Или все безвозратно утеряно?!
Хакер постарается восстановить данные по максимуму.

3
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
17.12.2016, 19:43  [ТС]
Вот это да!))) Трик просил лишь кусочек кода, а ты прям готовый исходник выложил)))) Но за это тебе огромное спасибо!!!! Теперь займусь кодингом, а то третий день с места не мог сдвинуться! Как будет что, напишу(но надеюсь терь сам справлюсь )
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
19.12.2016, 18:15  [ТС]
SizeOfBMP=tDib.dsBm.bmWidthBytes * tDib.dsBm.bmHeight
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
19.12.2016, 18:18  [ТС]
Вот сделал исходник, который показывает размер BMP, созданого с помощью Апи
Вложения
Тип файла: rar ImageSize.rar (2.3 Кб, 12 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2016, 18:18
Помогаю со студенческими работами здесь

Можно ли получить размер загружаемого файла перед тем как скачать его?
Хотя на самом деле мне нужно узнавать, скачался ли файл полностью. и без ошибок или нет. Хотел узнавать размер а потом сравнивать после...

Как можно получить при открытии какого-либо медиафайла его размер и изображение?
Добрый всем вечер. Подскажите пожалуйста, как можно вытащить при открытии, какого-либо медиа файла, его размер и изображение? Спасибо,...

[Brainfuck] Дано число, необходимо получить в памяти его же + его обратную запись
Помогите пожалуйста написать прогу на языке brainfuck: дано число, и необходимо получить в памяти его же + его обратную запись. То есть,...

Получение фото с веб камеры, занесение его в Bitmap и преобразование Bitmap в массив
В общем необходимо подключиться к веб камере сделать снимок и отправить его в сеть. Задачу я разделил на несколько этапов. 1. Сам...

Как получить дамп памяти программы, чтоб потом можно было его сохранить и проанализировать?
Ну тут собственно есть нюансы: 1. Как собственно получить сам дамп. То есть это скорее всего должен быть дамп виртуального адресного...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru