Это может быть немного запутанным, пожалуйста, спросите, нужно ли больше разъяснений.Итак, у меня есть окно X11, созданное так: (https://github.com/Aaahh/xwinwrap/blob/master/xwinwrap.c для полного файла)
XSetWindowAttributes attrs = {ParentRelative,
0L,
0,
0L,
0,
0,
Always,
0L,
0L,
False,
StructureNotifyMask | ExposureMask,
0L,
True,
0,
0};
if (have_argb_visual) {
attrs.colormap = window.colourmap;
attrs.border_pixel = 0;
attrs.background_pixel = 0x80ffffff;
flags |= CWBorderPixel | CWColormap | CWBackPixel;
} else {
flags |= CWBackPixel;
}
window.window = XCreateWindow(display, window.root, window.x, window.y,
window.width, window.height, 0, depth,
InputOutput, visual, flags, &attrs);
и
XVisualInfo visual_template;
XVisualInfo *visual_list;
int nxvisuals = 0, i;
visual_template.screen = screen;
visual_list =
XGetVisualInfo(display, VisualScreenMask, &visual_template, &nxvisuals);
for (i = 0; i < nxvisuals; i++) {
if (visual_list[i].depth == 32 && (visual_list[i].red_mask == 0xff0000 &&
visual_list[i].green_mask == 0x00ff00 &&
visual_list[i].blue_mask == 0x0000ff)) {
*visual = visual_list[i].visual;
*depth = visual_list[i].depth;
if (debug)
fprintf(stderr, "Found ARGB Visual\n");
XFree(visual_list);
return 1;
}
}
, так что это работает, когда прозрачные пиксели отображаютсяокно (с помощью программы, передающей окно с помощью идентификатора окна) (например, / usr / lib / xscreensaver / glmatx -window-id WID).
Основная проблема, с которой я сталкиваюсь, заключается в том, что в программах отсутствует одинаковая глубина цвета (поэтому все альфа установлены на 0). Я хочу заменить альфа с 0 на «значение» цвета в формате HSV.или, если проще, замените все черные пиксели на альфа 1. Идея в том, что я хочу смешать с argb, воссоздав эту ошибку: https://github.com/brndnmtthws/conky/pull/84
Итак, преобразовав изображение таким образом: (если фон черныйтогда изображение нормальное, поэтому я думаю, что оно чёрно-белого цвета, если это имеет смысл)
Как бы я поступил так, я подумал, может быть, былоспособ сопоставления цветов с другими цветами (как при преобразовании цветового формата пикселя в HSV, затем сопоставьте цвет с тем цветом, которым он был, но поместив часть значения HSV в качестве альфа).