2012-01-16 3 views
1

Я искал способ загрузить png в Каир, используя привязку Mono (C#) библиотеки, но ближайший я получил то, что в C-привязке библиотеки использовалось что-то вроде cairo_image_surface_create_from_png(). Однако в C# -связывании библиотеки я не видел никаких полезных статических элементов под Cairo.ImageSurface.*. Где-то в старой статье упоминалось, что привязка неполна, так ли это? В настоящее время я использую Gdk.Image.Pixbuf для загрузки встроенных изображений, но видел, что Gtk + перешел в Каир и что Windows.Forms в Mono используют Cairo, я думал, что C# -связывание Cairo будет, по меньшей мере, достаточно полным, чтобы включить загрузка изображения. Я, вероятно, что-то пропустил?Загрузить изображение в cairo на mono

ответ

2

Я сделал это совсем недавно. Вам нужно загрузить изображение в поверхность Каир: -

var icon = new ImageSurface(pngfile); 

Затем вы можете использовать метод ImageSurface.Show, чтобы сделать его:

icon.Show(ctx, x, y); 

Смотреть более полезные вещи в Mono.Cairo Cookbook page.

+0

Спасибо. Я посмотрел на конструкторы класса ImageSurface, и они, похоже, предлагают создание поверхностей из байт [], поскольку мой png встроен в качестве ресурса (и считан как объект потока). Я попробую это позже, но конструктору, кажется, нужна ширина/высота, которая должна быть в метаданных png, я подозреваю, что это может не работать, как анализ png на основе файловой системы. В другом случае, зацикливая файловую систему, есть ли другой способ встраивания png в каирскую поверхность без предварительного анализа gdk или подобных? например напрямую через каир или как можно чище? – Bill

+0

@ Пожалуй, не так далеко, насколько я знаю. Вероятно, вы могли бы найти размеры png из потока ресурсов. – IanNorton