Как я могу показать изображение из необработанных пиксельных данных в GTK, используя Haskell?
Я хотел бы создать изображение в Haskell с использованием библиотеки Rasterific, а затем отобразить это изображение в окне GTK; библиотека Rasterific позволяет мне генерировать 32-битное изображение с глубиной пикселя в формате RBGA, но у меня возникают проблемы с выяснением, как я могу взять это необработанное изображение и отобразить его в окне или в drawarea или в любом другом месте в GTK.
(Я потратил много времени, просматривая документацию, но мне было трудно понять, как соединить части, тем более что документации на Haskell часто не существует, и в какой-то момент библиотека cairo вмешивается таким образом, это не совсем понятно для меня.)
2 ответа
Для этой цели я написал пакет под названием AC-EasyRaster-GTK.
Это обертка вокруг gtk2hs. Эта библиотека предоставляет все необходимые части, но на самом деле не все так просто понять. Итак, я написал библиотеку, чтобы мне не приходилось искать этот материал!
ib_new
дает вам новый буфер изображения, ib_write_pixel
позволяет вам написать пиксель, и ib_display
запустит цикл событий GTK, отобразит растровое изображение в окне и заблокирует вызывающий поток до тех пор, пока пользователь не нажмет на кнопку закрытия. К сожалению, в GTK нет простого способа забить весь массив. (Требуется определенный порядок пикселей, который зависит от платформы...)
Я уверен, что есть лучший способ сделать это, но я также не нахожу это. Вы можете перебрать все пиксели исходного изображения, используя что-то вроде forM_ (range ((0,0),(w,h)))
и нарисуйте их на рисунок в Каире, используя что-то вроде этого: (вызовы в Каире верны, но я просто догадываюсь о растровых функциях)
drawPixel color x y = do
setSourceRGBA (red color) (green color) (blue color) (alpha color)
rectangle x y 1 1
paint