0

私はiosでImage Magickを使用しており、サーバーで使用されているいくつかのコマンドラインをConvertImageCommandに変換しました。すべてがうまくいきます。コマンドの引数として -monitor を追加したので、画像の小さな進行状況 (読み込み、サイズ変更、トリミングなど) をすべて確認できます。

ただし、プログレスバーを表示して、画像処理の進行状況をユーザーに知らせたいと思います。進行状況モニター機能の使用方法に関する非常に簡単な例を探しています...

SetImageProgressMonitor(Image *,const MagickProgressMonitor,void *),
SetImageInfoProgressMonitor(ImageInfo *,const MagickProgressMonitor,void *);

誰かが私を助けることができますか?

4

1 に答える 1

0

コードは次のとおりです。

- (void)ExecuteCommand {
    /*
     command is an array which contains all the elements of the ImageMagick command.
     example:
     command (
     convert,
     imgSource.jpg,
     "-blur",
     "0x2.5",
     "-paint",
     5,
     imgSaved.jpg
     )
     */

    ImageInfo *imageInfo = AcquireImageInfo();
    int nbArgs = command.count;
    char **argv = (char **)malloc((nbArgs + 1) * sizeof(char*));

    for (unsigned i = 0; i < nbArgs; i++)
    {
        NSString *argString = [command objectAtIndex:i];
        argv[i] = strdup([argString UTF8String]);
    }

    argv[nbArgs] = NULL;

    progress_monitor_method = SetImageInfoProgressMonitor(imageInfo, &MonitorProgress, self);
    ConvertImageCommand(imageInfo, nbArgs, argv, NULL, AcquireExceptionInfo());

    if (argv != NULL)
    {
        for (unsigned index = 0; argv[index] != NULL; index++) {
            free(argv[index]);
        }
        free(argv);
    }
}

MagickBooleanType MonitorProgress(const char *text,const MagickOffsetType offset,const MagickSizeType extent,void *client_data) {
    IM_TestViewController *IMVC = client_data;
    float prog = offset;
    float tot = extent;
    NSNumber *value = [NSNumber numberWithFloat:prog/tot];
    [IMVC performSelectorInBackground:@selector(updateProgressBar:) withObject:value] ;
    NSLog(@"Action : %@ %lld on %lld", [NSString stringWithCString:text encoding:NSUTF8StringEncoding], offset, extent);
    return MagickTrue;
}

- (void)updateProgressBar:(NSNumber *)value {
    self.progressBar.progress = [value floatValue];
}
于 2013-01-04T11:51:57.953 に答える