ios – 使用ImageMagick的C API(在iPhone上?)转换为单色?

ios – 使用ImageMagick的C API(在iPhone上?)转换为单色?,第1张

概述我正在使用 this post中引用的代码,但是想切换到基于ImageMagick C-API的解决方案,因为我想在单个图像处理库上进行标准化,并且需要IM来完成其他任务. 我可以找到大量使用转换命令行工具的示例,但没有关于如何在代码中进行单色转换的示例. 那里有任何示例代码? 您可以使用 MagickQuantizeImage功能实现单色转换,如 here所述. 我对抖动图像并不熟悉,但示例可能 我正在使用 this post中引用的代码,但是想切换到基于ImageMagick C-API的解决方案,因为我想在单个图像处理库上进行标准化,并且需要IM来完成其他任务.

我可以找到大量使用转换命令行工具的示例,但没有关于如何在代码中进行单色转换的示例.

那里有任何示例代码?

解决方法 您可以使用 MagickQuantizeImage功能实现单色转换,如 here所述.
我对抖动图像并不熟悉,但示例可能如下所示.
#include <wand/MagickWand.h>int main(int argc,char **argv) {  const size_t number_colors = 2;  const size_t treedepth     = 1;  MagickWandGenesis();  MagickWand *wand = NulL;  wand = NewMagickWand();  MagickReadImage(wand,"source.png");  MagickQuantizeImage(                     wand,// MagickWand                     number_colors,// Target number colors                     GRAYcolorspace,// colorspace                     treedepth,// Optimal depth                     MagickTrue,// Dither                     MagickFalse      // Quantization error                 );  MagickWriteImage(wand,"out.png");  if(wand)wand = DestroyMagickWand(wand);  MagickWandTerminus();  return 0;}

这有时会给你一个相当斑点的图像.

调整深度,颜色编号和/或禁用抖动可能会使您的结果更接近您提供的示例所期望的结果.

MagickQuantizeImage(                   wand,// MagickWand                   number_colors,// Target number colors                   GRAYcolorspace,// colorspace                   treedepth,// Optimal depth                   MagickFalse,// No-dither                   MagickFalse      // Quantization error               );

像这样……

对于iOS

将示例代码移植到iOS不需要太多努力. NextStep / Objective-c方法与MagickWand库兼容.以下示例使用临时文件来存储单色图像,但我确信有更好的方法将Magick图像数据直接传递给UImage对象.

// MyVIEwController.h#import <UIKit/UIKit.h>#import <wand/MagickWand.h>@interface MyVIEwController : UIVIEwController@property (retain,nonatomic) IBOutlet UIImageVIEw *imageVIEw;@property (retain,nonatomic) MagickWand *wand;@end// MyVIEwController.m#import "MyVIEwController.h"@implementation MyVIEwController- (voID)vIEwDIDLoad{    [super vIEwDIDLoad];    MagickWandGenesis();    self.wand = NewMagickWand();    [self drawMonoChromeImage:@"logo:"];}-(voID)drawMonoChromeImage:(Nsstring *)filePath{    // Create temporary file    Nsstring *tempfilePath = [NstemporaryDirectory()                                  stringByAppendingPathComponent:@"logo.jpg"];    // Read given image with C-string    MagickReadImage(self.wand,[filePath cStringUsingEnCoding:NSASCIIStringEnCoding]    );    // MonoChrome image    MagickQuantizeImage(self.wand,2,GRAYcolorspace,1,MagickFalse,MagickFalse);    // Write to temporary file    MagickWriteImage(self.wand,[tempfilePath cStringUsingEnCoding:NSASCIIStringEnCoding]    );    // Load UIImage from temporary file    UIImage *imgObj = [UIImage imageWithContentsOffile:tempfilePath];    // display on device    [self.imageVIEw setimage:imgObj];    [self.imageVIEw setContentMode:UIVIEwContentModeScaleAspectFit];}-(voID)vIEwDIDUnload{    // Clean-up    if (self.wand)        self.wand = DestroyMagickWand(self.wand);    MagickWandTerminus();}@end
总结

以上是内存溢出为你收集整理的ios – 使用ImageMagick的C API(在iPhone上?)转换为单色?全部内容,希望文章能够帮你解决ios – 使用ImageMagick的C API(在iPhone上?)转换为单色?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1099391.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存