Как использовать Cairo Graphics в 16-битном цветовом режиме?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать Cairo Graphics в 16-битном цветовом режиме?

Сообщение Anonymous »

Я использую Каирскую графическую библиотеку (https://www.cairographics.org/) и в настоящее время получаю экспорт своего приложения с разрешением 8 бит на канал с помощью следующей функции:

Код: Выделить всё

// Write pixel 8-bit
PF_Pixel* sampleIntegral8(PF_EffectWorld& def, int x, int y) {
return (PF_Pixel*)((char*)def.data +
(y * def.rowbytes) +
(x * sizeof(PF_Pixel)));
}

PF_Err cairoCopy8(void* refcon, A_long threadInd, A_long itemNum,
A_long iterTotal)
{
cairoRefcon* data = (cairoRefcon*)refcon;
int i = itemNum;
PF_Err err = PF_Err_NONE;
uint32_t* rowP;
PF_Pixel8* worldPtr = sampleIntegral8(data->output, 0, i);
rowP = (uint32_t*)(data->data + i * data->stride);
for (int x = 0; x < data->output.width; x++) {
worldPtr->alpha = rowP[x] >> 24;
if (worldPtr->alpha)
{
float rf = A_u_char(rowP[x] >> 16) / (float)worldPtr->alpha;
float gf = A_u_char(rowP[x] >> 8) / (float)worldPtr->alpha;
float bf = A_u_char(rowP[x] >> 0) / (float)worldPtr->alpha;
worldPtr->red = A_u_char(rf * PF_MAX_CHAN8);
worldPtr->green = A_u_char(gf * PF_MAX_CHAN8);
worldPtr->blue = A_u_char(bf * PF_MAX_CHAN8);
}
worldPtr++;
}

return err;
}
Это взято из примера, расположенного здесь: https://github.com/nithishakumar/Patter ... ttern.cppЯ попытался адаптировать этот код для экспорта в 16-битном формате (мои расчеты должны быть правильно выполнены в 16-битном формате), используя следующий код:

Код: Выделить всё

PF_Pixel16* sampleIntegral16(PF_EffectWorld& def, int x, int y) {
return (PF_Pixel16*)((char*)def.data +
(y * def.rowbytes) +
(x * sizeof(PF_Pixel16)));
}

PF_Err cairoCopy16(void* refcon, A_long threadInd, A_long itemNum,
A_long iterTotal)
{
cairoRefcon* data = (cairoRefcon*)refcon;
int i = itemNum;
PF_Err err = PF_Err_NONE;
uint32_t* rowP;
PF_Pixel16* worldPtr = sampleIntegral16(data->output, 0, i);
rowP = (uint32_t*)(data->data + i * data->stride);
for (int x = 0; x < data->output.width; x++) {
worldPtr->alpha = rowP[x] >> 24;
if (worldPtr->alpha)
{
float rf = A_u_char(rowP[x] >> 16) / (float)worldPtr->alpha;
float gf = A_u_char(rowP[x] >> 8) / (float)worldPtr->alpha;
float bf = A_u_char(rowP[x] >> 0) / (float)worldPtr->alpha;
worldPtr->red = A_u_char(rf * PF_MAX_CHAN16);
worldPtr->green = A_u_char(gf * PF_MAX_CHAN16);
worldPtr->blue = A_u_char(bf * PF_MAX_CHAN16);
}
worldPtr++;
}

return err;
}
Однако это не работает. Я подозреваю, что это потому, что он требует другого битового сдвига, чем 8-битный, но я просто не понимаю битового сдвига. Возможно, это не так.
Может ли кто-нибудь помочь мне понять, что не так, и помочь мне заставить эту 8-битную функцию работать для 16-битной?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/791 ... color-mode
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • HTML с ASP отображается в 32 -битном режиме на IIS [закрыто]
    Anonymous » » в форуме Html
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Ищу уважаемую кодовую базу ImGui и Cairo для функций редактирования текста.
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Использование cairo в Windows x64 [дубликат]
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Проблема Gstreamer+Cairo с двумя трубопроводами.
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Проблема Gstreamer+Cairo с двумя трубопроводами.
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»