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

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

16.12.2016, 19:00. Показов 2122. Ответов 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
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 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
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 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
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru