Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 4
Регистрация: 31.07.2016
Сообщений: 21
1

Нужно вручную заполнить массив байтов величинами разного размера, как сделать правильно?

04.08.2016, 17:30. Просмотров 527. Ответов 5

мне нужно вручную заполнить массив байтов величинами разного размера. недолго думая, я реализовал это как-то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*(char *)(bitmap)        = 'B';
*(char *)(bitmap + 1)    = 'M';
*(int *) (bitmap + 2)    = size + BFILEHEADERSIZE + BINFOHEADERSIZE;
*(int *) (bitmap + 6)    = 0;
*(int *) (bitmap + 10)   = BFILEHEADERSIZE + BINFOHEADERSIZE;
 
*(int *) (bitmap + 14)   = BINFOHEADERSIZE;
*(int *) (bitmap + 18)   = width;
*(int *) (bitmap + 22)   = height;
*(short *)(bitmap + 26)  = 1;
*(short *)(bitmap + 28)  = 24;
*(int *) (bitmap + 30)   = 0;
*(int *) (bitmap + 34)   = size;
*(int *) (bitmap + 38)   = 0;
*(int *) (bitmap + 42)   = 0;
*(int *) (bitmap + 46)   = 0;
*(int *) (bitmap + 50)   = 0;
работает, но на вид - самый настоящий быдлокод. есть более эстетичный способ добиться того же самого?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2016, 17:30
Ответы с готовыми решениями:

Как правильно сверстать блоки разного размера?
Здравствуйте всем!) Есть идея наверстать новости в WP-сайте вот таким образом. На главной...

Как правильно сохранять структуры разного размера в одном файле?
У меня есть структуры (struct) одного типа, но разного размера (длины строк в них отличаются). Как...

Заполнить с клавиатуры массив словами разного размера и заменяет в нем самое длинное слово на "МАХ"
Напишите программу, которая заполняет с клавиатуры массив А(3,3) словами разного размера и заменяет...

Как сделать BorderWidth разного размера с каждой стороны?
Мира вам. Имею необходимость отрисовывать рамку и заголовок формы, но столкнулся с проблемой,...

5
5980 / 2106 / 737
Регистрация: 10.12.2010
Сообщений: 5,923
Записей в блоге: 3
04.08.2016, 19:43 2
Не совсем понятна причина такого извращения, если для битмапов есть заголовки в виде готовых структур. Почему бы вам просто не взять и использовать нужный?
0
3 / 3 / 4
Регистрация: 31.07.2016
Сообщений: 21
05.08.2016, 06:41  [ТС] 3
Цитата Сообщение от HighPredator Посмотреть сообщение
для битмапов есть заголовки в виде готовых структур
ключевое слово "для битмапов". это не единственный такой момент в коде, там ещё есть подобное для кастомных форматов, например. хотя, я, безусловно, идиот. нужно же было просто написать структуру .
0
Нарушитель
53 / 54 / 8
Регистрация: 01.07.2014
Сообщений: 1,007
05.08.2016, 10:00 4
C
1
2
3
4
5
6
7
8
9
10
11
12
#define 0x01 fmt_bmp
#define 0x02 fmt_jpg
#define 0x03 fmt_png
// etc
 
struct MySuperFormat {
  int w;
  int h;
  int bpp;
  int fmt;
  char* data;
};
Я вообще вот такой дескрипшен использую.
Но это только для тех форматов, для которых у вас есть загрузчики(png к примеру).
0
3 / 3 / 4
Регистрация: 31.07.2016
Сообщений: 21
05.08.2016, 12:56  [ТС] 5
bodya_men, не в моём случае. я не враппер пишу. тут весьма дурное нечто, работающее с собственным форматом. конкретно этот код - часть конвертера битмапа в этот самый формат. битмапы весьма просты сами по себе и алгоритм преобразования тоже, в целом, не сложный (преобразовываться будут только монохромные изображения, с цветами изощряться не придётся). поэтому я решил не тянуть сторонних библиотек, а написать читалку битмапов с нуля (фактически мне нужно получить из файла палитру (если есть) и данные), но чёт забыл про структуры и породил вот такое вот гротескное нечто. бывает.
0
Нарушитель
53 / 54 / 8
Регистрация: 01.07.2014
Сообщений: 1,007
05.08.2016, 20:58 6
В хэдере битмапы хранится только ширина и высота и палитра(bmp).
Остальное по 3 байта на цвет пикселя(RGB) или по 3 байта на цвет пикселя и альфа(RGBA, PNG).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2016, 20:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как из нескольких массивов разного размера сделать один
Здравствуйте! Запутался с алгоритмом. Суть такая: есть массив a со списком адресатов и массив...

Как правильно проинициализировать массив вручную?
Здрасти. как правильно проинициализировать массив в ручную? а то у меня ошибка main.cpp|60|error:...

Как правильно объявить массив байтов?
Как правильно объявить массив байтов? Надо ли вручную выставлять ему размер после "GetBitmapBits"?...

Создать массив, заполнить его случайными величинами и найти среднее арифметическое
кто подскажет, как создать массив , заполнить его случайными величинами и найти среднее...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.