Форум программистов, компьютерный форум CyberForum.ru

Маска байта - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить минимальный среди элементов побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread609997.html
помогите пожалуйста написать программу Дана целочисленная квадратная матрица. Определить минимальный среди элементов побочной диагонали. Для ввода, вывода и обработки матрицы использовать функции.
C++ Помоги разобравться с нескольками прогами Объясните, какие действия выполняет каждая строка в 6 программах. №1. .... int add(int n, int m) {return n + m;} int divi(int n, int m) {return n / m;} int mult(int n, int m) {return n * m;} int subt(int n, int m) {return n - m;} void main() { http://www.cyberforum.ru/cpp-beginners/thread609991.html
Работа с файлами C++
Напишите пожалуйста программу ( с комментариями по возможности ) Информация об участниках спортивных соревнований содержит: - Ф.И.О. игрока; - игровой номер; - возраст; - рост; - вес; Вывести информацию о самой молодой, рослой и легкой команде.
C++ Определить среднюю массу мальчиков и средний рост девочек
Напишите пожалуйста программу(с комментариями по возможности): "По данным сведениям об учениках класса определить среднюю массу мальчиков и средний рост девочек. Кто из учеников класса самый высокий?"
C++ Попадает ли точка с заданными координатами в полукруг http://www.cyberforum.ru/cpp-beginners/thread609977.html
Определить, попадает ли точка с заданными координатами в полукруг радиусом R, расположенный в I и II четверти. (Уравнение окружности R2=x2+y2.).
C++ operator= Такой вопрос. Есть объект. Хочу чтобы при присваивании его к чеслу выдавалось число. Например. class MyClass { short MyClass::operator=(const MyClass&My) {return 12;}; }; Main() { подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.06.2012, 18:37  [ТС]     Маска байта
Цитата Сообщение от Toshkarik Посмотреть сообщение
Все намного проще чем Вы думаете:
Для 32 битного числа:
red = 255 & ( p >> 24 );
green = 255 & ( p >> 16 );
blue = 255 & ( p >> 8 );
Для 24 битного числа:
red = 255 & ( p >> 16 );
green = 255 & ( p >> 8 );
blue = 255 & p;
Во-первых ты забыл про целую разрядность, во вторых маска предназначена как раз для того, чтоб на одной разрядности поддерживать несколько вариантов, например, rgb101010 и rgba8888 одновременно и разные порядки цветности rgb, bgr и т.д., а ты свёл к одному варианту. У меня сейчас книга по форматам на столе и там приведены разные варианты по одной разрядности, например, rgb555 и rgb565 на разрядность 16. Это разные маски. 555 - это
1111 1000 0000 0000 0000 0000 0000 0000
0000 0111 1100 0000 0000 0000 0000 0000
0000 0000 0011 1110 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
, а 565 -
1111 1000 0000 0000 0000 0000 0000 0000
0000 0111 1110 0000 0000 0000 0000 0000
0000 0000 0001 1111 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
. Это разные четвёрки масок. А в четвёртых где у тебя вообще альфа? В заголовке файла 4 маски.

Добавлено через 4 минуты
Я сосчитал вручную валидные маски. С учётом не стандартных типа 4 миллиардов градаций красного. Всего 529 масок на компонент. Ещё надо проверить маски на непересекабельность, но это проше некуда.

Добавлено через 4 минуты
C++
1
(RedMask&GreenMask=0x00000000)&&(RedMask&BlueMask=0x00000000)&&(RedMask&AlphaMask=0x00000000)&&(GreenMask&BlueMask=0x00000000)&&(GreenMask&AlphaMask=0x00000000)&&(BlueMask&AlphaMask=0x00000000)
Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
Только единственно не понятно - зачем проверять маску?
Для валидации графического файла. Если он не валиден, то надо не пытаться его прочитать, множа глюки, а закрыть прогу и логировать фатальную гогу.
 
Текущее время: 05:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru