История изменений
Исправление bormant, (текущая версия) :
Неверная интерпретация.
У ТС нет альфаканала:
alpha: ... length: 0 ...
Значит:
static void get_framebufferdata(
...
if (/*fb_varinfo_p->transp.length > 0*/ false) {
...
} else {
srcAlpha = -1; // not used
}
...
static void convert8888to32(
...
outbuffer[(i<<2)+Alpha] = /*srcAlpha >= 0*/ false ? /*...*/ : 0;
А 0 тут нужен, поскольку во всех остальных convert*
static void convert1555to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
...
static void convert565to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
Выходит, что вызов
png_set_invert_alpha(png_ptr)
нужен только ради единственного отличия в convert8888to32()
— когда альфаканал есть, проинвертировать inbuffer[i*4+srcAlpha]
; иначе вместо тех нулей можно было сразу писать 0xff и не дергать инверсию альфаканала.То есть 0xff (исправленный на 0 в ходе обсуждения) как раз и выбивается из этой общей схемы, и именно он и являлся явной ошибкой.
А на неправильность с альфаканалом (который физически есть, т.е. при выводе
alpha: ... length: не_ноль ...
) жалоб не было.Исправление bormant, :
Неверная интерпретация.
У ТС нет альфаканала:
alpha: ... length: 0 ...
Значит:
static void get_framebufferdata(
...
if (/*fb_varinfo_p->transp.length > 0*/ false) {
...
} else {
srcAlpha = -1; // not used
}
...
static void convert8888to32(
...
outbuffer[(i<<2)+Alpha] = /*srcAlpha >= 0*/ false ? /*...*/ : 0;
А 0 тут нужен, поскольку во всех остальных convert*
static void convert1555to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
...
static void convert565to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
Выходит, что вызов
png_set_invert_alpha(png_ptr)
нужен только ради единственного отличия в convert8888to32()
— когда альфаканал есть, проинвертировать inbuffer[i*4+srcAlpha]
; иначе вместо тех нулей можно было стразу писать 0xff и не дергать инверсию альфаканала.То есть 0xff (исправленный на 0 в ходе обсуждения) как раз и выбивается из этой общей схемы, и именно он и являлся явной ошибкой.
А на неправильность с альфаканалом (который физически есть, т.е. при выводе
alpha: ... length: не_ноль ...
) жалоб не было.Исправление bormant, :
Неверная интерпретация.
У ТС нет альфаканала:
alpha: ... length: 0 ...
Значит:
static void get_framebufferdata(
...
if (/*fb_varinfo_p->transp.length > 0*/ false) {
...
} else {
srcAlpha = -1; // not used
}
...
static void convert8888to32(
...
outbuffer[(i<<2)+Alpha] = /*srcAlpha >= 0*/ false ? /*...*/ : 0;
А 0 тут нужен, поскольку во всех остальных convert*
static void convert1555to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
...
static void convert565to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
Выходит, что вызов
png_set_invert_alpha(png_ptr)
нужен только ради единственного отличия в convert8888to32()
— когда альфаканал есть, проинвертировать inbuffer[i*4+srcAlpha]
; иначе вместо тех нулей можно было стразу писать 0xff и не дергать инверсию альфаканала.То есть 0xff, исправленный на 0, выбивается из этой общей схемы.
Исправление bormant, :
Неверная интерпретация.
У ТС нет альфаканала:
alpha: ... length: 0 ...
Значит:
static void get_framebufferdata(
...
if (/*fb_varinfo_p->transp.length > 0*/ false) {
...
} else {
srcAlpha = -1; // not used
}
...
static void convert8888to32(
...
outbuffer[(i<<2)+Alpha] = /*srcAlpha >= 0*/ false ? /*...*/ : 0;
А 0 тут нужен, поскольку во всех остальных convert*
static void convert1555to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
...
static void convert565to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
Выходит, что вызов
png_set_invert_alpha(png_ptr)
нужен только ради единственного отличия в convert8888to32() — когда альфаканал есть, проинвертировать inbuffer[i*4+srcAlpha]
; иначе вместо тех нулей можно было стразу писать 0xff и не дергать инверсию альфаканала.То есть 0xff, исправленный на 0, выбивается из этой общей схемы.
Исходная версия bormant, :
Неверная интерпретация.
У ТС нет альфаканала:
alpha: ... length: 0 ...
Значит:
static void get_framebufferdata(
...
if (/*fb_varinfo_p->transp.length > 0*/ false) {
...
} else {
srcAlpha = -1; // not used
}
...
static void convert8888to32(
...
outbuffer[(i<<2)+Alpha] = /*srcAlpha >= 0*/ false ? /*...*/ : 0;
А 0 тут нужен, поскольку во всех остальных convert*
static void convert1555to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
...
static void convert565to32(
...
outbuffer[(i<<1)+Alpha] = '\0';
Выходит, что вызов png_set_invert_alpha(png_ptr); нужен только ради единственного отличия в convert8888to32() — когда альфаканал есть, проинвертировать
inbuffer[i*4+srcAlpha]
; иначе вместо тех нулей можно было стразу писать 0xff и не дергать инверсию альфаканала.То есть 0xff, исправленный на 0, выбивается из этой общей схемы.