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

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

16.12.2016, 19:00. Показов 2173. Ответов 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru