Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2015, 16:26   #1
Вася47
Новичок
Джуниор
 
Регистрация: 23.03.2015
Сообщений: 4
По умолчанию BMP to HEX

Доброго времени суток!

Не поделится ли кто названием или ссылкой на готовый конвертер BMP - HEX, способный переводить каждый пиксель из BMP-файла в 24-битное слово в HEX файл.
Вася47 вне форума Ответить с цитированием
Старый 23.03.2015, 16:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А просто в HEX редакторе BMP файл открыть не катит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.03.2015, 16:36   #3
Вася47
Новичок
Джуниор
 
Регистрация: 23.03.2015
Сообщений: 4
По умолчанию

Нет, не катит
Вася47 вне форума Ответить с цитированием
Старый 23.03.2015, 17:18   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,603
По умолчанию

В этой программе считывается каждый пиксель по отдельности для добавления альфа-канала (делал эту программу в декабре 2012 года)

Код:
// Добавить альфа канал в BMP
// Описание формата BMP: http://ru.wikipedia.org/wiki/BMP
 
 
#include <stdio.h>
#include <windows.h>
 
 struct pixel_rgba
 {
  public:
   BYTE b;
   BYTE g;
   BYTE r;
   BYTE a;
 };
 
 struct pixel_rgb
 {
  public:
   BYTE b;
   BYTE g;
   BYTE r;
 };
 
 
int main()
{
BITMAPFILEHEADER bmp_header;
BITMAPINFOHEADER info_header;
int i;
unsigned char y;
 
FILE *f;
FILE *g;
f = fopen("wood_100x100.bmp", "rb");
g = fopen("wood_100x100rgba.bmp", "wb");
fseek(f, 0 , SEEK_SET);
// SEEK_SET на начало файла
// SEEK_CUR текущая позиция
fread(&bmp_header, 1, sizeof(BITMAPFILEHEADER), f);
printf("sizeof(BITMAPFILEHEADER) : %x %d\n",
sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER));
fseek(g, 0 , SEEK_SET);
fwrite(&bmp_header, 1, sizeof(BITMAPFILEHEADER), g);
 
 
 
 
int dr = bmp_header.bfOffBits - sizeof(BITMAPFILEHEADER);
printf("dr: %d\n", dr);
 
if (dr == 40)
{
fseek(g, sizeof(BITMAPFILEHEADER), SEEK_SET);
fread(&info_header, 1, sizeof(BITMAPINFOHEADER), f);
 
  info_header.biSize = sizeof(BITMAPINFOHEADER);
  printf("info_header.biSize: %x\n", info_header.biSize);
  printf("info_header.biWidth: %d\n", info_header.biWidth);
  printf("info_header.biHeight: %d\n", info_header.biHeight);
  printf("info_header.biPlanes: %d\n", info_header.biPlanes);
  printf("info_header.biBitCount: %d\n", info_header.biBitCount);
  printf("info_header.biCompression: %d\n", info_header.biCompression);
  printf("info_header.biSizeImage: %d\n", info_header.biSizeImage);
  printf("info_header.biXPelsPerMeter: %d\n", info_header.biXPelsPerMeter);
  printf("info_header.biYPelsPerMeter: %d\n", info_header.biYPelsPerMeter);
  printf("info_header.biClrUsed: %d\n", info_header.biClrUsed);
  printf("info_header.biClrImportant: %d\n", info_header.biClrImportant);
 
info_header.biBitCount = 32;
 
fseek(g, sizeof(BITMAPFILEHEADER) , SEEK_SET);
fwrite(&info_header, 1, sizeof(BITMAPINFOHEADER), g);
 
}
 
printf("bmp_header.bfType: %x\n", bmp_header.bfType);
printf("bmp_header.bfSize: %x\n", bmp_header.bfSize);
printf("bmp_header.bfReserved1: %x\n", bmp_header.bfReserved1);
printf("bmp_header.bfReserved2: %x\n", bmp_header.bfReserved2);
printf("bmp_header.bfOffBits: %x\n", bmp_header.bfOffBits);
 
printf("sizeof(BITMAPFILEHEADER) : %x %d\n", sizeof(BITMAPFILEHEADER), sizeof(BITMAPFILEHEADER));
printf("sizeof(BITMAPV4HEADER) : %x %d\n", sizeof(BITMAPV4HEADER), sizeof(BITMAPV4HEADER));
printf("sizeof(BITMAPV5HEADER) : %x %d\n", sizeof(BITMAPV5HEADER), sizeof(BITMAPV5HEADER));
 
 
// перебор пикселей изображения
int offset;
int offset2;
int j = 0;
int h = sizeof(pixel_rgb);
printf("sizeof(pixel_rgb) : %x %d\n", sizeof(pixel_rgb), sizeof(pixel_rgb));
pixel_rgb rt;
pixel_rgba rt2;
// условие остановки
while(bmp_header.bfOffBits +  j * sizeof(pixel_rgb) < bmp_header.bfSize)
{
offset =  bmp_header.bfOffBits +  j * sizeof(pixel_rgb);
offset2 =  bmp_header.bfOffBits +  j * sizeof(pixel_rgba);
fseek(f, offset , SEEK_SET);
fread(&rt, 1, sizeof(pixel_rgb), f);
rt2.b = rt.b;
rt2.g = rt.g;
rt2.r = rt.r;
if (rt.b == 255 && rt.g == 255 && rt.r == 255)
 rt2.a = 255;
else
 rt2.a = 0;
 
printf("%x %x %x ",  rt.b,  rt.g,  rt.r);
 
fseek(g, offset2 , SEEK_SET);
fwrite(&rt2, 1, sizeof(pixel_rgba), g);
 
j++;
}
 
fclose(f);
fclose(g);
 
 
return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 23.03.2015, 18:35   #5
С.М.С
Участник клуба
 
Аватар для С.М.С
 
Регистрация: 29.12.2008
Сообщений: 1,598
По умолчанию

Цитата:
Сообщение от Вася47 Посмотреть сообщение
Доброго времени суток!

Не поделится ли кто названием или ссылкой на готовый конвертер BMP - HEX, способный переводить каждый пиксель из BMP-файла в 24-битное слово в HEX файл.
когда конвертировал картинки для tft дисплея использовал Image2lcd, если не получится скачать перешлю.
С.М.С вне форума Ответить с цитированием
Старый 23.03.2015, 20:12   #6
Вася47
Новичок
Джуниор
 
Регистрация: 23.03.2015
Сообщений: 4
По умолчанию

challengerr, Спасибо! Но это не совсем то, что я хотел.

С.М.С, Спасибо! Однако нашел единственную версию этой программы и в ней отсутствует перевод в hex, можно конечно перевести в .с, но для меня это не совсем удобно. Если у вас есть версия, в которой можно осуществить перевод непосредственно из .bmp в .hex, то не могли бы вы переслать мне ее?
Вася47 вне форума Ответить с цитированием
Старый 23.03.2015, 21:01   #7
С.М.С
Участник клуба
 
Аватар для С.М.С
 
Регистрация: 29.12.2008
Сообщений: 1,598
По умолчанию

у той версии, что у меня тоже нет напрямую в hex. Делал в С, затем удалял лишнее в начале строки.
С.М.С вне форума Ответить с цитированием
Старый 23.03.2015, 22:57   #8
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Вася47 Посмотреть сообщение
конвертер BMP - HEX, способный переводить каждый пиксель из BMP-файла в 24-битное слово в HEX файл.
..HEX где будет хранится и куда будеш выводить её (окно, консоль)?
Если кодированная картинка будет лежать в экзешнике, то можно не кодить её, а запихнуть целиком в stream-поток и вызывать от туда. Она будет везде таскать свою задницу вместе с экзешником..

Если такой вариант не подходит, то можно закодировать картинку в base64, с обратной перекодировкой при выводе. В этом случае - в теле должна быть функция для декодирования..
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 23.03.2015 в 23:01.
R71MT вне форума Ответить с цитированием
Старый 23.03.2015, 23:44   #9
Вася47
Новичок
Джуниор
 
Регистрация: 23.03.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от R71MT Посмотреть сообщение
..HEX где будет хранится и куда будеш выводить её (окно, консоль)?
Если кодированная картинка будет лежать в экзешнике, то можно не кодить её, а запихнуть целиком в stream-поток и вызывать от туда. Она будет везде таскать свою задницу вместе с экзешником..

Если такой вариант не подходит, то можно закодировать картинку в base64, с обратной перекодировкой при выводе. В этом случае - в теле должна быть функция для декодирования..
Храниться будет в ROMe DE1-SoC, оттуда выводиться сразу на экран... ROM только HEXы переваривает
Вася47 вне форума Ответить с цитированием
Старый 24.03.2015, 00:10   #10
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Вася47 Посмотреть сообщение
Храниться будет в ROMe
..всё ясно! Тогда, может ещё один вариант сработает... ?!
Амишные бивисы хранят свои "Full Screen Logo" в формате *.epa! Для их смены есть утилита Advanced BIOS Logo Reader (ABR-2), которая и конвертирует и сжимает различные типы графических файлов. Этот *.ера - конкретный бинарник.. Погугли, пожет найдёш..
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 24.03.2015 в 00:26.
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наложить BMP на BMP. sergeyrulit Общие вопросы Delphi 6 05.03.2015 13:41
Конвертор *.bmp to *.bmp z768 Мультимедиа в Delphi 14 28.10.2014 21:11
Ошибка. Берём hex-код, шифруем hex-код, собираем всё в файл. Poltish Общие вопросы Delphi 2 21.08.2013 12:57
file->HEX HEX->BIN kakawkin Общие вопросы Delphi 1 25.04.2012 01:02
Загрузка BMP в Simple Graph и сохранение в BMP формат artemavd Общие вопросы Delphi 10 02.10.2010 14:19