Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 4

Как получить структуру файла bmp в классе TBitmap?

09.11.2017, 15:03. Показов 2146. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Открытие файла через стандартный диалог: OpenDialog1->Execute()
Изображение сохраняется как TBitmap в source:

C++
1
2
   Graphics::TBitmap *source   = new Graphics::TBitmap;
   source->Assign(Image1->Picture->Bitmap);
Вопрос. Как выделить заголовок из source?
Значений source->Width, source->Height не достаточно.
Нужно получить, в частности, PixelsPerInch, который не входит в класс TBitmap.
Позиции PixelsPerInch в заголовке bmp файла известны - это байты 38-41 и 42-45.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2017, 15:03
Ответы с готовыми решениями:

Как получить ссылку на объект (структуру) в другом классе
Долгое время об этом не задумывался, т.к. программы были маленькие, но теперь у меня несколько классов и интерфейсов в разных файлах .cs,...

Как получить массив из BMP файла
Пишу на c++ Winapi в VisualSudio2013. Мне нужно получить массив с значениями rgb из bmp средствами winapi. Если я не на правильном...

Получить кадр из AVI файла в TBitmap
Получить кадр из AVI файла в TBitmap Если есть у кого а есть исходник выложите, перерыр кучу инфы и нет продвижения по извлечению из...

6
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
09.11.2017, 23:51
Цитата Сообщение от assunta Посмотреть сообщение
Как выделить заголовок
Прочитайте bmp в двоичный буфер и там анализируйте__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     TMemoryStream *ms = new TMemoryStream ;
     ms->LoadFromFile("picture.bmp");
     Image1->Picture->Bitmap->LoadFromStream(ms);
 
     char * buf1 = new char((int)(ms->Size+2));
     ms->Position = 0;
     ms->Read(buf1,99);
     Label1->Caption = String().sprintf("%.2X %.2X %.2X %.2X ",
           buf1[38],buf1[39],buf1[40],buf1[41]);
     delete ms;
}
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 4
10.11.2017, 11:37  [ТС]
Спасибо за быстрый ответ. Ваш вариант работает отлично! Однако исходные условие другие - файл загружается в диалоге:
OpenDialog1->Execute().
В этом случае, явный вызов LoadFromFile("picture.bmp") отсутствует.
Файл загружается процедурой:
Image1->Picture->Bitmap->LoadFromFile(OpenDialog1->FileName);

И далее имеем дело с source:
Graphics::TBitmap *source = new Graphics::TBitmap;
source->Assign(Image1->Picture->Bitmap);
Здесь без особого труда можно получить: source->Height, source->Width, source->PixelFormat.

Однако другие параметрs заголовка на получить. Например при вставке кода: source->PixelsPerInch,
получаем ошибку - "PixelsPerInch - не принадлежит классу TBitmap".

P.S. Есть проект по обнаружению простых объектов в шумах. Программирование в Borland C++. Может это Вас заинтересовать на платной основе?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.11.2017, 12:59
Так запихните содержимое картинки в буфер...
C++
1
2
3
     Image1->Picture->Bitmap->SaveToStream(ms);
     ms->Position = 0;
     ms->Read(buf2,99);
это же не сложно. Вам очень хочется "иметь дело с source"? Но это графический объект, и не все его свойства вам доступны. Если разбираетесь в структуре bmp, то лучше все же с буфером (и буфер лучше разместить не в обработчике -on heap- а в зоне shared memory или как там это называется..., а то может не хватить объема).

Добавлено через 30 минут
П.С. и вообще-то PixelsPerInch - в свойствах формы; вряд ли картинка на форме может иметь другое чем форма разрешение.
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 4
10.11.2017, 17:35  [ТС]
Спасибо. Попробую сделать так. Выходные картинки, после ряда преобразований, выводятся на печать. Размеры печати могут быть разные и поэтому необходимо варьировать dpi. Входные картинки - результат сканирования, здесь так же требуется знание dpi.
Кстати конвертер dpi: https://dpiconverter.com/ru/
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
10.11.2017, 17:57
Не знаю, что вам нужно получить, но форма также имеет функцию print и её можно отправить на печать непосредственно. А картинку на форме можно разместить "с растяжкой" по её размеру (stretch - true).
0
0 / 0 / 0
Регистрация: 09.11.2017
Сообщений: 4
14.11.2017, 15:27  [ТС]
Попробую в "двух словах" пояснить задачу. Есть Заказчик. По ТЗ, вх.данные - цифровой файл высококачественной худ. репродукции. Вых. данные - цифровой файл той же репродукции со встроенной голограммой некоторых образов (например набор символов - S12345ы) - т.н., скрытых водяных знаков (СВЗ) . Вых. файл идет на печать в форматах от А4 до А0 с плотностью отсчетов d1=(150)300 dpi. Бумажный носитель - холст. Обратная задача - фотографирование, с помощью цифровой камеры, репродукции со встроенной голограммой СВЗ после печати на холсте. При этом должно быть выполнено условие d2>=2*d1, где d2 - плотность дискретных отсчетов при фотофиксации.

Опытный образец ПО - http://www.smirnov.sp.ru/water... tware.html
Пример обработки - http://smirnov.spb.su/papers/resote_wm_paper.php

Сейчас реализован процесс восстановления голограммы, т.е. получена картинка некоторых образов(символов). Задача - декодировать образы, т.е. привести к алфавитно-цифровому виду (ID). На входе модуля декодирования (МД) - картинки символов (заранее известны, для текущей репродукции) имеющие случайный масштаб и осложнены шумом и яркостными искажениями. Изменение масштаба связано с произволом процесса фотографирования. Шумы, скорее всего нормальные, возникают при восстановлении голограммы СВЗ. Искажение яркости связано с оптическими характеристиками камеры смартфона и характеристиками бумажного носителя. Программный модуль МД - составная часть http://www.smirnov.sp.ru/water... tware.html.
В качестве оболочки (формы) ПО взят известный project ImageProcessing Borland C++6.0 (есть в папке examples Borland C++6.0). Если нет, то можно скачать http://petromramor.ru/temp/ImageProcessing.zip

В соответствии, с выше изложенным, ищу программиста Borland C++6.0, имеющего опыт работы с сигналами и изображениями. Пока некоторые задачи пытаюсь решить сам.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.11.2017, 15:27
Помогаю со студенческими работами здесь

Как получить цвет пикселя из BMP файла
Можно как-нибудь получить цвет определённого пикселя BMP файла и узнать разрешение файла.

Получить RGB bmp файла
Всем привет. Стоит задача получить массив пикселей с помощью Bitmap Я нуб в этом, но написал что то типа: #if...

Получить из файла BMP матрицу значений пикселов
уважаемые программисты никак не могу справиться со следующей задачей. мне необходимо получить из bmp файла значение его пикселов в виде...

Как сделать объекты TBitmap глобальными для файла?
Есть вот такая штука #include <vcl.h> #pragma hdrstop #include "Unit4.h" ...

Получить пиксель из TBitmap
Здравствуйте, недавно решил программировать на RAD Studio, там обнаружил новую библиотеку fmx, на которой можно писатть игры приложение под...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
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
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru