Я пытаюсь преобразовать изображение RGB в изображение ARGB, в основном просто добавляя 255 для альфа-канала. Мне было интересно, есть ли какой-либо пакетный метод для этого без итерации? Поэтому, чтобы перебирать данные RGB и добавлять 255 к каждому пикселю.Бит упаковки в C
ответ
C не имеет «методов» ... И нет, это не похоже на то, что в стандартной библиотеке есть обычная программа. Я думаю, вам нужно закодировать его самостоятельно, используя что-то вроде этого:
void setAlpha(unsigned char *rgba, int width, int height, int alpha)
{
int x, y;
for(y = 0; y < height; y++)
{
for(x = 0; x < width; x++, rgba += 4)
{
rgba[3] = (unsigned char) alpha;
}
}
}
Основные допущения:
- Упаковка заказа является RGBA в памяти, то есть смещение от 3 до альфа байт, с самого начала пикселя.
- Изображение сохраняется в верхнем левом пикселе на начальном адресе, справа налево, сверху вниз.
- Там нет обивки или что-нибудь
Также обратите внимание на порядке петель; это может существенно повлиять на производительность в реальном времени из-за кэширования. Этот код касается последовательно расположенных пикселей в памяти, что хорошо называют «хорошей локальностью».
Изменение указателя на следующий пиксель вместо указания адреса (rgba[4 * y * width + 4 * x + 3]
) также является оптимизацией, и (для меня) достаточно легко понять.
это в значительной степени то, что у меня было, но немного сокращает переменные. Спасибо за помощь – 2009-04-22 11:44:52
Можем ли мы видеть ваши структуры? –
его просто принимает unsigned char * и преобразует его в другой unsigned char *, вставляя 255 каждый 4-й байт. – 2009-04-22 11:42:24