Я искал способ загрузить 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
1
A
ответ
2
Я сделал это совсем недавно. Вам нужно загрузить изображение в поверхность Каир: -
var icon = new ImageSurface(pngfile);
Затем вы можете использовать метод ImageSurface.Show, чтобы сделать его:
icon.Show(ctx, x, y);
Смотреть более полезные вещи в Mono.Cairo Cookbook page.
Спасибо. Я посмотрел на конструкторы класса ImageSurface, и они, похоже, предлагают создание поверхностей из байт [], поскольку мой png встроен в качестве ресурса (и считан как объект потока). Я попробую это позже, но конструктору, кажется, нужна ширина/высота, которая должна быть в метаданных png, я подозреваю, что это может не работать, как анализ png на основе файловой системы. В другом случае, зацикливая файловую систему, есть ли другой способ встраивания png в каирскую поверхность без предварительного анализа gdk или подобных? например напрямую через каир или как можно чище? – Bill
@ Пожалуй, не так далеко, насколько я знаю. Вероятно, вы могли бы найти размеры png из потока ресурсов. – IanNorton