/* * cheungmine * 2013-5-5 */#include <stdio.h>#include <stdlib.h>#include <time.h>#ifdef _MSC_VER #include <windows.h> #pragma warning (disable : 4996)#endif/* cairo api */#include "../lib/cairo/include/cairo.h"#include "../lib/cairo/include/cairo-features.h"#include "../lib/cairo/include/cairo-svg.h"#include "../lib/cairo/include/cairo-pdf.h"#include "../lib/cairo/include/cairo-ps.h"#include "../lib/cairo/include/cairo-ft.h"#include "../lib/cairo/include/cairo-version.h"#include "../lib/cairo/include/cairo-win32.h"#pragma comment (lib, "../../lib/cairo/lib/cairo.lib")#ifdef _MSC_VERstatic int bstr2utf8(BSTR bstrIn, int bstrLen, byte *pOut){ int cbSize; if (!bstrIn) { return 0; } cbSize = WideCharToMultiByte(CP_UTF8, 0, bstrIn, bstrLen, 0, 0, 0, 0); if (pOut) { cbSize = WideCharToMultiByte(CP_UTF8, 0, bstrIn, bstrLen, (LPSTR) pOut, cbSize, 0, 0); assert(pOut[cbSize-1]==0); } return cbSize;}static int bytes2bstr(UINT uCodePage, byte* pBytesIn, DWORD cbSizeIn, BSTR *pBstrOut){ int cchNeeded; LPSTR pstr; *pBstrOut = 0; cchNeeded = MultiByteToWideChar(uCodePage, 0, (LPCSTR)pBytesIn, cbSizeIn, 0, 0); if (0 == cchNeeded) { return (0); } pstr = (LPSTR) CoTaskMemAlloc (sizeof(DWORD) + sizeof(WCHAR)*cchNeeded); if (!pstr) { return (-1); } if (cchNeeded != MultiByteToWideChar(uCodePage, 0, (LPCSTR)pBytesIn, cbSizeIn, (LPWSTR)(pstr+sizeof(DWORD)), cchNeeded)) { CoTaskMemFree(pstr); return (-2); } *((DWORD*)pstr) = sizeof(WCHAR)*(cchNeeded-1); *pBstrOut = (BSTR)(pstr + sizeof(DWORD)); return cchNeeded;}char * ansi2utf8(char *str){ BSTR bstr = 0; byte *utf8 = 0; int len, cb; len = bytes2bstr(CP_ACP, (byte*) str, strlen(str)+1, &bstr); if (len > 0) { cb = bstr2utf8(bstr, len, utf8); if (cb > 0) { utf8 = (byte*) malloc(cb); bstr2utf8(bstr, len, utf8); } SysFreeString(bstr); return (char*) utf8; } return 0;}#else#endifint drawChinaText(char *shapefile, char *shapeid, int width, int length, gde_drawsurface_format format){ cairo_surface_t *surface; cairo_t *cr; char *font; char *text; font = ansi2utf8("文泉驛等寬正黑"); //"Arial Unicode MS" text = ansi2utf8("Hello, Chinese! 你好,中國人!"); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, length); cr = cairo_create (surface); cairo_select_font_face (cr, font, CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, 32.0); cairo_set_source_rgb (cr, 0.0, 0.0, 1.0); cairo_move_to (cr, 10.0, 50.0); cairo_show_text (cr, text); cairo_destroy (cr); cairo_surface_write_to_png (surface, "c:/temp/hello-cairo.png"); cairo_surface_destroy (surface); free(font); free(text); return 0;}