- magick_MagickImage.c
/*
* Class: magick_MagickImage
* Method: coalesceImages
* Signature: ()Lmagick/MagickImage;
*/
JNIEXPORT jobjectArray JNICALL Java_magick_MagickImage_coalesceImages
(JNIEnv *env, jobject self)
{
int i, imageLength;
jclass magickImageClass = 0;
Image *image = NULL, *coalesceImages = NULL;
jobject newObj;
jobjectArray newObjArray;
ExceptionInfo exception;
image = (Image*) getHandle(env, self, "magickImageHandle", NULL);
if (image == NULL) {
throwMagickException(env, "Cannot retrieve image handle");
return NULL;
}
GetExceptionInfo(&exception);
coalesceImages = CoalesceImages(image, &exception);
if (coalesceImages == NULL) {
throwMagickApiException(env, "Cannot coalesce image", &exception);
DestroyExceptionInfo(&exception);
return NULL;
}
DestroyExceptionInfo(&exception);
imageLength = GetImageListLength(coalesceImages);
magickImageClass = (*env)->FindClass(env, "magick/MagickImage");
if (magickImageClass == 0) {
return NULL;
}
newObjArray = (*env)->NewObjectArray(env, imageLength, magickImageClass, NULL);
if (newObjArray == NULL) {
throwMagickException(env, "Unable to construct newObjArray[]");
return NULL;
}
for (i = 0; i < imageLength; i++){
newObj = newImageObject(env, GetImageFromList(coalesceImages, i));
if (newObj == NULL) {
DestroyImageList(coalesceImages);
throwMagickException(env, "Unable to create coalesce image");
return NULL;
}
(*env)->SetObjectArrayElement(env, newObjArray, i, newObj);
}
return newObjArray;
}
/*
* Class: magick_MagickImage
* Method: deconstructImages
* Signature: ()Lmagick/MagickImage;
*/
JNIEXPORT jobject JNICALL Java_magick_MagickImage_deconstructImages
(JNIEnv *env, jobject self)
{
Image *image = NULL, *deconstructImage = NULL;
jobject newObj;
ExceptionInfo exception;
image = (Image*) getHandle(env, self, "magickImageHandle", NULL);
if (image == NULL) {
throwMagickException(env, "Cannot retrieve image handle");
return NULL;
}
GetExceptionInfo(&exception);
deconstructImage = DeconstructImages(image, &exception);
if (deconstructImage == NULL) {
throwMagickApiException(env, "Cannot deconstruct image", &exception);
DestroyExceptionInfo(&exception);
return NULL;
}
DestroyExceptionInfo(&exception);
newObj = newImageObject(env, deconstructImage);
if (newObj == NULL) {
DestroyImageList(deconstructImage);
throwMagickException(env, "Unable to create deconstruct image");
return NULL;
}
return newObj;
}
- MagickImage.java
/**修正後、コマンドプロンプト(管理者)で Make を実行
* Merge a sequence of images.
* @exception MagickException on error
*/
public native MagickImage[] coalesceImages()
throws MagickException;
/**
* Break down an image sequence into constituent parts.
* @exception MagickException on error
*/
public native MagickImage deconstructImages()
throws MagickException;
cd "\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64"
vcvarsx86_amd64.bat
cd \pleiades\workspace\6.6.9\src
nmake -f Makefile.all
サンプルコード実行
try{
MagickImage mi = new MagickImage(new ImageInfo("c:\\Temp\\in.gif"));
MagickImage[] moArray = mi.coalesceImages();
for (int i = 0; i < moArray.length; i++) {
moArray[i] = moArray[i].resizeImage(200, 200, 1);
}
MagickImage mo = new MagickImage(moArray).deconstructImages();
mo.setFileName("c:\\Temp\\out.gif");
mo.writeImage(new ImageInfo());
} catch (Exception ex) {
ex.printStackTrace();
}
人気ブログランキングへ