LINUX.ORG.RU

Xlib графика

 


1

1

Для создания пиксмапа - XCreatePixmap, для рисования - функи типа XDrawPoint. Для рисования на окнах\других gc - XCopyЧтоТоТам.

Как насчет получения пиксела/указателя на блок памяти для прямого изменения? Если я хочу, например, нарисовать фигуру и размыть картинку по гауссу?

P.S. Может что-нибудь популярно рассказать о XCreateImage и иже с ним?


Ответ на: комментарий от nikitos

То, что написано в главе: «Вот раньше компьютеры были большие, а мониторы маленькие. Поэтому они не поддерживали цвета/больше 16 цветов/больше 256 цветов. Если вы планируете использовать программу на мониторе с 24 бит на пиксель - скипните раздел. А вот есть такая система как палитры. Могут быть для каждого своя или одна общая. Экономьте цвета, а то не дай бже, на вашем восьмицветном мониторе не хватит цветов. Ели вы планируете использовать программу на 24 бит на пиксель - у вас все будет хорошо.» И в таком духе пара десятков страниц. Ничего не имею против авторов книги, но это явно мало помогло.

Да, немного говорится о XImage, что она хавает внешний массив и не копирует его, что дает возможность его тыкать палочкой и менять его элементы. НО. Не рассказывается про его формат.

inn
() автор топика

Если тебе пиксель получить, то есть команда получения пикселя XGetPixel.

указателя на блок памяти для прямого изменения?

Отвечаю именно на то, что ты спросил и не спрашиваю зачем. Ответ - MIT-SHM с фолбеком на обычные иксовые функции доступа (не забываем про удаленные дисплеи). Дальше гугл спасет. :)

Zubok ★★★★★
()
Ответ на: комментарий от inn

Да, немного говорится о XImage, что она хавает внешний массив и не копирует его, что дает возможность его тыкать палочкой и менять его элементы. НО. Не рассказывается про его формат.

Поищи XYPixmap и ZPixmap. Их форматы описаны.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Ответ - MIT-SHM с фолбеком на обычные иксовые функции доступа

Мрм. Как-то оно пахнет извращением. Спрашивал вот зачем - к примеру надо отрисовать какую-нибудь картинку, построенную, скажем, из примитивов. Потом к ней фильтры графические применить, типа размытия/сдвига и пр. Для этого надо знать значение цвета конкретного пикселя. А использовать XGetPixel для, например, 1000х1000 пикселей вместо image.data[X + Y * w]... Что-то есть для таких целей? Я правильно понимаю, что тут рецепт такой: создали XImage c размером 1000х1000 в формате XY\ZPixmap, до создания имеем массив с данными, который прицепили к XImage. В результате получили image[X + Y * w] для read\write дел, так?

inn
() автор топика
Ответ на: комментарий от inn

Мрм. Как-то оно пахнет извращением.

Стандартная практика.

https://raw.github.com/tindzk/GTK/master/gdk/gdkimage.c

Я правильно понимаю, что тут рецепт такой: создали XImage c размером 1000х1000 в формате XY\ZPixmap, до создания имеем массив с данными, который прицепили к XImage. В результате получили image[X + Y * w] для read\write дел, так?

XImage - это client-side структура, а не server-side. Когда ты создаешь XImage, то ей владеет не сервер, а ты - клиент. Делай с ней, что хочешь: размазывай, сдвигай. А потом, когда сделаешь, то XPutImage - она нарисуется на твоем drawable на сервере.

Если же ты рисуешь примитивами на сервере (XDraw всякие), а тебе потом надо эту картинку забрать для обработки, то надо использовать XGetImage, XGetSubImage. В результате у себя получишь указатель на XImage. Дальше обрабатываешь.

Zubok ★★★★★
()
Ответ на: комментарий от inn

Да, немного говорится о XImage, что она хавает внешний массив и не копирует его, что дает возможность его тыкать палочкой и менять его элементы. НО. Не рассказывается про его формат.

А что, для реализации «размытия» этого мало? Также не понял, что вы хотите дополнительно узнать «про его формат»?

nikitos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.