magick_DrawInfo.c
上传用户:qingzhou
上传日期:2013-04-21
资源大小:733k
文件大小:14k
源码类别:

破解

开发平台:

Java

  1. #include <jni.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6. #include <sys/types.h>
  7. #include <magick/api.h>
  8. #include "jmagick.h"
  9. #include "magick_DrawInfo.h"
  10. /*
  11.  * Class:     magick_DrawInfo
  12.  * Method:    init
  13.  * Signature: (Lmagick/ImageInfo;)V
  14.  */
  15. JNIEXPORT void JNICALL Java_magick_DrawInfo_init
  16.   (JNIEnv *env, jobject self, jobject jImageInfo)
  17. {
  18.     jfieldID drawInfoFieldID = 0;
  19.     ImageInfo *imageInfo = NULL;
  20.     DrawInfo *drawInfo = NULL;
  21.     /* Get the ImageInfo handle. */
  22.     imageInfo = (ImageInfo*) getHandle(env, jImageInfo,
  23.        "imageInfoHandle", NULL);
  24.     if (imageInfo == NULL) {
  25. throwMagickException(env, "Unable to get ImageInfo handle");
  26. return;
  27.     }
  28.     /* If the DrawInfo handle is not NULL, we destroy the old
  29.      * handle before creating a new one.
  30.      */
  31.     drawInfo = (DrawInfo*) getHandle(env, self,
  32.      "drawInfoHandle",
  33.      &drawInfoFieldID);
  34.     if (drawInfo != NULL) {
  35. DestroyDrawInfo(drawInfo);
  36.     }
  37.     /* Initialise and set the new DrawInfo handle. */
  38.     drawInfo = (DrawInfo*) AcquireMemory(sizeof(DrawInfo));
  39.     if (drawInfo == NULL) {
  40. throwMagickException(env, "Memory allocation failure");
  41. return;
  42.     }
  43.     GetDrawInfo(imageInfo, drawInfo);
  44.     // drawInfo->encoding = (char *) AcquireString("Unicode");
  45.     if (!setHandle(env, self, "drawInfoHandle",
  46.    drawInfo, &drawInfoFieldID)) {
  47. throwMagickException(env, "Unable to set DrawInfo handle");
  48. return;
  49.     }
  50. }
  51. /*
  52.  * Class:     magick_DrawInfo
  53.  * Method:    destroyDrawInfo
  54.  * Signature: ()V
  55.  */
  56. JNIEXPORT void JNICALL Java_magick_DrawInfo_destroyDrawInfo
  57.   (JNIEnv *env, jobject self)
  58. {
  59.     DrawInfo *info = NULL;
  60.     jfieldID fieldID = 0;
  61.     info = (DrawInfo*) getHandle(env, self,
  62.  "drawInfoHandle", &fieldID);
  63.     if (info != NULL) {
  64. DestroyDrawInfo(info);
  65. setHandle(env, self, "drawInfoHandle", NULL, &fieldID);
  66.     }
  67. }
  68. /*
  69.  * Class:     magick_DrawInfo
  70.  * Method:    setPrimitive
  71.  * Signature: (Ljava/lang/String;)V
  72.  */
  73. JNIEXPORT void JNICALL Java_magick_DrawInfo_setPrimitive
  74.     (JNIEnv *env, jobject self, jstring primitive)
  75. {
  76.     DrawInfo *info = NULL;
  77.     const char *cstr = NULL;
  78.     const jchar *jstr = NULL;
  79.     int i, len, is8bits;
  80.     info = (DrawInfo *) getHandle(env, self, "drawInfoHandle", NULL);
  81.     if (info == NULL) {
  82. throwMagickException(env, "Unable to retrieve handle");
  83. return;
  84.     }
  85.     if (info->primitive != NULL) {
  86. LiberateMemory((void**) &info->primitive);
  87.     }
  88.     jstr = (*env)->GetStringChars(env, primitive, 0);
  89.     len = (*env)->GetStringLength(env, primitive);
  90.     is8bits = JNI_TRUE;
  91.     for (i = 0; i < len; i++) {
  92.         if (jstr[i] > 255) {
  93.             is8bits = JNI_FALSE;
  94.             break;
  95.         }
  96.     }
  97.     if (is8bits) {
  98.         char *str = (char *) AcquireMemory(len+1);
  99.         if (str == NULL) {
  100.             throwMagickException(env, "Unable to allocate memory");
  101.             (*env)->ReleaseStringChars(env, primitive, jstr);
  102.             return;
  103.         }
  104.         for (i = 0; i < len; i++) {
  105.             str[i] = (char) jstr[i];
  106.         }
  107.         str[len] = '';
  108.         info->primitive = str;
  109.         printf("String: %sn", str);
  110.         if (info->encoding != NULL) {
  111.             LiberateMemory((void **) &info->encoding);
  112.         }
  113.     }
  114.     (*env)->ReleaseStringChars(env, primitive, jstr);
  115.     if (!is8bits) {
  116.         cstr = (*env)->GetStringUTFChars(env, primitive, 0);
  117.         if (cstr == NULL) {
  118.             throwMagickException(env, "Unable to retrieve Java string chars");
  119.             return;
  120.         }
  121.         info->primitive = (char *) AcquireString(cstr);
  122.         (*env)->ReleaseStringUTFChars(env, primitive, cstr);
  123.         if (info->primitive == NULL) {
  124.             throwMagickException(env, "Unable to allocate memory");
  125.         }
  126.         if (info->encoding != NULL) {
  127.             LiberateMemory((void **) &info->encoding);
  128.         }
  129.         info->encoding = (char *) AcquireString("UTF-8");
  130.         if (info->encoding == NULL) {
  131.             throwMagickException(env, "Unable to allocate memory");
  132.         }
  133.     }
  134. }
  135. /*
  136.  * Class:     magick_DrawInfo
  137.  * Method:    getPrimitive
  138.  * Signature: ()Ljava/lang/String;
  139.  */
  140. getStringMethod(Java_magick_DrawInfo_getPrimitive,
  141. primitive,
  142. "drawInfoHandle",
  143. DrawInfo)
  144. /*
  145.  * Class:     magick_DrawInfo
  146.  * Method:    setGeometry
  147.  * Signature: (Ljava/lang/String;)V
  148.  */
  149. setStringMethod(Java_magick_DrawInfo_setGeometry,
  150. geometry,
  151. "drawInfoHandle",
  152. DrawInfo)
  153. /*
  154.  * Class:     magick_DrawInfo
  155.  * Method:    getGeometry
  156.  * Signature: ()Ljava/lang/String;
  157.  */
  158. getStringMethod(Java_magick_DrawInfo_getGeometry,
  159. geometry,
  160. "drawInfoHandle",
  161. DrawInfo)
  162. /*
  163.  * Class:     magick_DrawInfo
  164.  * Method:    setText
  165.  * Signature: (Ljava/lang/String;)V
  166.  */
  167. JNIEXPORT void JNICALL Java_magick_DrawInfo_setText
  168.     (JNIEnv *env, jobject self, jstring text)
  169. {
  170.     DrawInfo *info = NULL;
  171.     const char *cstr = NULL;
  172.     const jchar *jstr = NULL;
  173.     int i, len, is8bits;
  174.     info = (DrawInfo *) getHandle(env, self, "drawInfoHandle", NULL);
  175.     if (info == NULL) {
  176. throwMagickException(env, "Unable to retrieve handle");
  177. return;
  178.     }
  179.     if (info->text != NULL) {
  180. LiberateMemory((void**) &info->text);
  181.     }
  182.     jstr = (*env)->GetStringChars(env, text, 0);
  183.     len = (*env)->GetStringLength(env, text);
  184.     is8bits = JNI_TRUE;
  185.     for (i = 0; i < len; i++) {
  186.         if (jstr[i] > 255) {
  187.             is8bits = JNI_FALSE;
  188.             break;
  189.         }
  190.     }
  191.     if (is8bits) {
  192.         char *str = (char *) AcquireMemory(len+1);
  193.         if (str == NULL) {
  194.             throwMagickException(env, "Unable to allocate memory");
  195.             (*env)->ReleaseStringChars(env, text, jstr);
  196.             return;
  197.         }
  198.         for (i = 0; i < len; i++) {
  199.             str[i] = (char) jstr[i];
  200.         }
  201.         str[len] = '';
  202.         info->text = str;
  203.         printf("String: %sn", str);
  204.         if (info->encoding != NULL) {
  205.             LiberateMemory((void **) &info->encoding);
  206.         }
  207.     }
  208.     (*env)->ReleaseStringChars(env, text, jstr);
  209.     if (!is8bits) {
  210.         cstr = (*env)->GetStringUTFChars(env, text, 0);
  211.         if (cstr == NULL) {
  212.             throwMagickException(env, "Unable to retrieve Java string chars");
  213.             return;
  214.         }
  215.         info->text = (char *) AcquireString(cstr);
  216.         (*env)->ReleaseStringUTFChars(env, text, cstr);
  217.         if (info->text == NULL) {
  218.             throwMagickException(env, "Unable to allocate memory");
  219.         }
  220.         if (info->encoding != NULL) {
  221.             LiberateMemory((void **) &info->encoding);
  222.         }
  223.         info->encoding = (char *) AcquireString("UTF-8");
  224.         if (info->encoding == NULL) {
  225.             throwMagickException(env, "Unable to allocate memory");
  226.         }
  227.     }
  228. }
  229. /*
  230.  * Class:     magick_DrawInfo
  231.  * Method:    getText
  232.  * Signature: ()Ljava/lang/String;
  233.  */
  234. getStringMethod(Java_magick_DrawInfo_getText,
  235. text,
  236. "drawInfoHandle",
  237. DrawInfo)
  238. /*
  239.  * Class:     magick_DrawInfo
  240.  * Method:    setFont
  241.  * Signature: (Ljava/lang/String;)V
  242.  */
  243. setStringMethod(Java_magick_DrawInfo_setFont,
  244. font,
  245. "drawInfoHandle",
  246. DrawInfo)
  247. /*
  248.  * Class:     magick_DrawInfo
  249.  * Method:    getFont
  250.  * Signature: ()Ljava/lang/String;
  251.  */
  252. getStringMethod(Java_magick_DrawInfo_getFont,
  253. font,
  254. "drawInfoHandle",
  255. DrawInfo)
  256. /*
  257.  * Class:     magick_DrawInfo
  258.  * Method:    setStrokeAntialias
  259.  * Signature: (Z)V
  260.  */
  261. setBoolMethod(Java_magick_DrawInfo_setStrokeAntialias,
  262.       stroke_antialias,
  263.       "drawInfoHandle",
  264.       DrawInfo)
  265. /*
  266.  * Class:     magick_DrawInfo
  267.  * Method:    getStrokeAntialias
  268.  * Signature: ()Z
  269.  */
  270. getBoolMethod(Java_magick_DrawInfo_getStrokeAntialias,
  271.       stroke_antialias,
  272.       "drawInfoHandle",
  273.       DrawInfo)
  274. /*
  275.  * Class:     magick_DrawInfo
  276.  * Method:    setTextAntialias
  277.  * Signature: (Z)V
  278.  */
  279. setBoolMethod(Java_magick_DrawInfo_setTextAntialias,
  280.       text_antialias,
  281.       "drawInfoHandle",
  282.       DrawInfo)
  283. /*
  284.  * Class:     magick_DrawInfo
  285.  * Method:    getTextAntialias
  286.  * Signature: ()Z
  287.  */
  288. getBoolMethod(Java_magick_DrawInfo_getTextAntialias,
  289.       text_antialias,
  290.       "drawInfoHandle",
  291.       DrawInfo)
  292. /*
  293.  * Class:     magick_DrawInfo
  294.  * Method:    setGravity
  295.  * Signature: (I)V
  296.  */
  297. setIntMethod(Java_magick_DrawInfo_setGravity,
  298.      gravity,
  299.      "drawInfoHandle",
  300.      DrawInfo)
  301. /*
  302.  * Class:     magick_DrawInfo
  303.  * Method:    getGravity
  304.  * Signature: ()I
  305.  */
  306. getIntMethod(Java_magick_DrawInfo_getGravity,
  307.      gravity,
  308.      "drawInfoHandle",
  309.      DrawInfo)
  310. /*
  311.  * Class:     magick_DrawInfo
  312.  * Method:    setOpacity
  313.  * Signature: (I)V
  314.  */
  315. setIntMethod(Java_magick_DrawInfo_setOpacity,
  316.      opacity,
  317.      "drawInfoHandle",
  318.      DrawInfo)
  319. /*
  320.  * Class:     magick_DrawInfo
  321.  * Method:    getOpacity
  322.  * Signature: ()I
  323.  */
  324. getIntMethod(Java_magick_DrawInfo_getOpacity,
  325.      opacity,
  326.      "drawInfoHandle",
  327.      DrawInfo)
  328. /*
  329.  * Class:     magick_DrawInfo
  330.  * Method:    setDecorate
  331.  * Signature: (I)V
  332.  */
  333. setIntMethod(Java_magick_DrawInfo_setDecorate,
  334.      decorate,
  335.      "drawInfoHandle",
  336.      DrawInfo)
  337. /*
  338.  * Class:     magick_DrawInfo
  339.  * Method:    getDecorate
  340.  * Signature: ()I
  341.  */
  342. getIntMethod(Java_magick_DrawInfo_getDecorate,
  343.      decorate,
  344.      "drawInfoHandle",
  345.      DrawInfo)
  346. /*
  347.  * Class:     magick_DrawInfo
  348.  * Method:    setStrokeWidth
  349.  * Signature: (D)V
  350.  */
  351. setDoubleMethod(Java_magick_DrawInfo_setStrokeWidth,
  352. stroke_width,
  353. "drawInfoHandle",
  354. DrawInfo)
  355. /*
  356.  * Class:     magick_DrawInfo
  357.  * Method:    getStrokeWidth
  358.  * Signature: ()D
  359.  */
  360. getDoubleMethod(Java_magick_DrawInfo_getStrokeWidth,
  361. stroke_width,
  362. "drawInfoHandle",
  363. DrawInfo)
  364. /*
  365.  * Class:     magick_DrawInfo
  366.  * Method:    setPointsize
  367.  * Signature: (D)V
  368.  */
  369. setDoubleMethod(Java_magick_DrawInfo_setPointsize,
  370. pointsize,
  371. "drawInfoHandle",
  372. DrawInfo)
  373. /*
  374.  * Class:     magick_DrawInfo
  375.  * Method:    getPointsize
  376.  * Signature: ()D
  377.  */
  378. getDoubleMethod(Java_magick_DrawInfo_getPointsize,
  379. pointsize,
  380. "drawInfoHandle",
  381. DrawInfo)
  382. /*
  383.  * Class:     magick_DrawInfo
  384.  * Method:    setFill
  385.  * Signature: (Lmagick/PixelPacket;)V
  386.  */
  387. setPixelPacketMethod(Java_magick_DrawInfo_setFill,
  388.      fill,
  389.      "drawInfoHandle",
  390.      DrawInfo)
  391. /*
  392.  * Class:     magick_DrawInfo
  393.  * Method:    getFill
  394.  * Signature: ()Lmagick/PixelPacket;
  395.  */
  396. getPixelPacketMethod(Java_magick_DrawInfo_getFill,
  397.      fill,
  398.      "drawInfoHandle",
  399.      DrawInfo)
  400. /*
  401.  * Class:     magick_DrawInfo
  402.  * Method:    setStroke
  403.  * Signature: (Lmagick/PixelPacket;)V
  404.  */
  405. setPixelPacketMethod(Java_magick_DrawInfo_setStroke,
  406.      stroke,
  407.      "drawInfoHandle",
  408.      DrawInfo)
  409. /*
  410.  * Class:     magick_DrawInfo
  411.  * Method:    getStroke
  412.  * Signature: ()Lmagick/PixelPacket;
  413.  */
  414. getPixelPacketMethod(Java_magick_DrawInfo_getStroke,
  415.      stroke,
  416.      "drawInfoHandle",
  417.      DrawInfo)
  418. /*
  419.  * Class:     magick_DrawInfo
  420.  * Method:    setUnderColor
  421.  * Signature: (Lmagick/PixelPacket;)V
  422.  */
  423. setPixelPacketMethod(Java_magick_DrawInfo_setUnderColor,
  424.      undercolor,
  425.      "drawInfoHandle",
  426.      DrawInfo)
  427. /*
  428.  * Class:     magick_DrawInfo
  429.  * Method:    getUnderColor
  430.  * Signature: ()Lmagick/PixelPacket;
  431.  */
  432. getPixelPacketMethod(Java_magick_DrawInfo_getUnderColor,
  433.      undercolor,
  434.      "drawInfoHandle",
  435.      DrawInfo)
  436. /*
  437.  * Class:     magick_DrawInfo
  438.  * Method:    setBorderColor
  439.  * Signature: (Lmagick/PixelPacket;)V
  440.  */
  441. setPixelPacketMethod(Java_magick_DrawInfo_setBorderColor,
  442.      border_color,
  443.      "drawInfoHandle",
  444.      DrawInfo)
  445. /*
  446.  * Class:     magick_DrawInfo
  447.  * Method:    getBorderColor
  448.  * Signature: ()Lmagick/PixelPacket;
  449.  */
  450. getPixelPacketMethod(Java_magick_DrawInfo_getBorderColor,
  451.      border_color,
  452.      "drawInfoHandle",
  453.      DrawInfo)
  454. /*
  455.  * Class:     magick_DrawInfo
  456.  * Method:    setTile
  457.  * Signature: (Lmagick/MagickImage;)V
  458.  */
  459. JNIEXPORT void JNICALL Java_magick_DrawInfo_setTile
  460.   (JNIEnv *env, jobject self, jobject tileImage)
  461. {
  462.     DrawInfo *drawInfo;
  463.     Image *image, *imgCopy;
  464.     ExceptionInfo exception;
  465.     drawInfo = (DrawInfo*) getHandle(env, self, "drawInfoHandle", NULL);
  466.     if (drawInfo == NULL) {
  467.         throwMagickException(env, "Unable to obtain DrawInfo handle");
  468.         return;
  469.     }
  470.     image = (Image*) getHandle(env, tileImage, "magickImageHandle", NULL);
  471.     if (image == NULL) {
  472.         throwMagickException(env, "Unable to obtain MagickImage handle");
  473.         return;
  474.     }
  475.     GetExceptionInfo(&exception);
  476.     imgCopy = CloneImage(image, 0, 0, 1, &exception);
  477.     if (imgCopy == NULL) {
  478.         throwMagickApiException(env, "Unable to clone MagickImage",
  479.                                 &exception);
  480.         DestroyExceptionInfo(&exception);
  481.         return;
  482.     }
  483.     DestroyExceptionInfo(&exception);
  484.     if (drawInfo->tile != NULL) {
  485.         DestroyImages(drawInfo->tile);
  486.     }
  487.     drawInfo->tile = imgCopy;
  488. }
  489. /*
  490.  * Class:     magick_DrawInfo
  491.  * Method:    getTile
  492.  * Signature: ()Lmagick/MagickImage;
  493.  */
  494. JNIEXPORT jobject JNICALL Java_magick_DrawInfo_getTile
  495.   (JNIEnv *env, jobject self)
  496. {
  497.     DrawInfo *drawInfo;
  498.     Image *image;
  499.     ExceptionInfo exception;
  500.     jobject imgObj;
  501.     drawInfo = (DrawInfo*) getHandle(env, self, "drawInfoHandle", NULL);
  502.     if (drawInfo == NULL) {
  503.         throwMagickException(env, "Unable to obtain DrawInfo handle");
  504.         return NULL;
  505.     }
  506.     GetExceptionInfo(&exception);
  507.     image = CloneImage(drawInfo->tile, 0, 0, 1, &exception);
  508.     if (image == NULL) {
  509.         throwMagickApiException(env, "Unable to clone image", &exception);
  510.         DestroyExceptionInfo(&exception);
  511.         return NULL;
  512.     }
  513.     DestroyExceptionInfo(&exception);
  514.     imgObj = newImageObject(env, image);
  515.     if (imgObj == NULL) {
  516.         DestroyImages(image);
  517.         throwMagickException(env, "Unable to create image object from handle");
  518.         return NULL;
  519.     }
  520.     return imgObj;
  521. }