Как я могу показать изображение из необработанных пиксельных данных в 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
Другие вопросы по тегам