blog2010 > 2010年10月18日 > Win32アプリケーションで cairo + librsvg を使いSVGを表示する

#blognavi
  • [Visual C++]-[Win32]-[Win32 プロジェクト]のプロジェクト(仮にDrawSVG)を作成しておく
  • http://ftp.acc.umu.se/pub/gnome/binaries/win32/ から下記のbinアーカイブとdevアーカイブをダウンロード。
    見つからなければ「dependencies」も探す。★マークのものは「gtk+-bundle_*_win32.zip」で代用可能
    • cairo_*_win32.zip ★
    • cairo-dev_*_win32.zip ★
    • expat_*_win32.zip ★
    • fontconfig_*_win32.zip ★
    • freetype_*_win32.zip ★
    • glib_*_win32.zip ★
    • glib-dev_*_win32.zip ★
    • gtk+_*_win32.zip ★
    • gtk+-dev_*_win32.zip ★
    • libcroco_*_win32.zip
    • libgsf_*_win32.zip
    • libpng_*_win32.zip
    • librsvg_*_win32.zip
    • librsvg-dev_*_win32.zip
    • libxml2_*_win32.zip
    • pango_*_win32.zip ★
    • zlib_*_win32.zip ★
  • 全binアーカイブの「bin」に含まれる全DLLをプロジェクトフォルダに展開
    ※「gtk+_*_win32.zip」は「libgdk_pixbuf-2.0-0.dll」のみ使用
  • 全devアーカイブの「include」以下をプロジェクトフォルダ(.vcxprojのある所)に展開
    「glib-dev_*_win32.zip」の「lib/glib-2.0/include/」も「include」として展開
    ※「gtk+-dev_*_win32.zip」は「include/gtk-2.0/gdk-pixbuf」のみ使用
  • 「cairo-dev_*_win32.zip」の「lib/cairo.lib」をプロジェクトフォルダに展開
  • http://bellard.org/tcc/ から「tcc-*-win32-bin.zip」をダウンロード
  • 「tiny_implib.exe」をプロジェクトフォルダに展開
  • VisualStudioコマンドプロンプトを起動
  • プロジェクトフォルダに移動し下記コマンドを実行
    • > tiny_impdef.exe librsvg-2-2.dll
    • > lib.exe /def:librsvg-2-2.def /machine:x86 /out:librsvg-2.2.lib
  • プロジェクトの[構成プロパティ]-[C/C++]-[追加のインクルード ディレクトリ]に以下を設定
    • .\include
    • .\include\cairo
    • .\include\librsvg-2\librsvg
    • .\include\gtk-2.0
    • .\include\glib-2.0
  • プロジェクトの[構成プロパティ]-[リンカー]-[入力]-[追加の依存ファイル]に以下を追加
    • cairo.lib
    • librsvg-2-2.lib
  • DrawSVG.cppに以下の修正を加える(本来はWM_PAINTじゃなくて適切な個所で行う)
#include "cairo-win32.h"
#include "cairo-svg.h"
#include "rsvg.h"
#include "rsvg-cairo.h"
(中略)
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: 描画コードをここに追加してください...
        RsvgHandle      *rsvg;
        cairo_surface_t *cr_surface;
        cairo_t         *cr;

        rsvg_init();
        rsvg = rsvg_handle_new_from_file("test.svg", NULL);
        cr_surface = cairo_win32_surface_create(hdc);
        cr = cairo_create(cr_surface);
        rsvg_handle_render_cairo(rsvg, cr);
        cairo_destroy(cr);
        cairo_surface_destroy(cr_surface);
        rsvg_handle_free(rsvg);
        rsvg_term();

        EndPaint(hWnd, &ps);
        break;
(以下略)



カテゴリ: [Program] - &trackback() - 2010年10月18日 11:44:33
名前: コメント:
#blognavi
最終更新:2010年10月18日 11:46
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。