LINUX.ORG.RU

История изменений

Исправление 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, выбивается из этой общей схемы.