我可以找到大量使用转换命令行工具的示例,但没有关于如何在代码中进行单色转换的示例.
那里有任何示例代码?
解决方法 您可以使用 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上?)转换为单色?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)