2017-07-30 11 views

答えて

0

あなたは個々のピクセルを変更したい場合は、この答えはのみ適用されます。..

まず使用UIImage.cgImageCGImageを取得します。次に、CGBitmapContextCreateCGColorSpaceCreateDeviceRGBの色空間を使用し、必要なブレンドモードを使用してビットマップコンテキストを作成します。

次に、CGContextDrawImageを呼び出して、あなたが提供するピクセル配列に基づいてイメージをコンテキストに描画します。クリーンアップ、ピクセルの配列を持つようになりました。

- (uint8_t*)getPixels:(UIImage *)image { 
    CGColorSpaceRef cs= CGColorSpaceCreateDeviceRGB(); 
    uint8_t *pixels= malloc(image.size.width * image.size.height * 4); 
    CGContextRef ctx= CGBitmapContextCreate(rawData, image.size.width, image.size.height, 8, image.size.width * 4, cs, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
    CGColorSpaceRelease(cs); 

    CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.width, image.size.height)); 
    CGContextRelease(ctx); 
    return pixels; 
} 

、あなたが欲しいしかし、ピクセルを変更します。..そして、ピクセルから画像を再作成...

- (UIImage *)imageFromPixels:(uint8_t *)pixels width:(NSUInteger)width height:(NSUInteger)height { 
    CGDataProviderRef provider = CGDataProviderCreateWithData(nil, pixels, width * height * 4, nil); 

    CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB(); 
    CGImageRef cgImageRef = CGImageCreate(width, height, 8, 32, width * 4, cs, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast, provider, nil, NO, kCGRenderingIntentDefault); 

    pixels = malloc(width * height * 4); 
    CGContextRef ctx = CGBitmapContextCreate(pixels, width, height, 8, width * 4, cs, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast); 

    CGContextDrawImage(ctx, (CGRect) { .origin.x = 0, .origin.y = 0, .size.width = width, .size.height = height }, cgImage); 
    CGImageRef cgImage = CGBitmapContextCreateImage(ctx); 
    UIImage *image = [UIImage imageWithCGImage:cgImage]; 
    CGImageRelease(cgImage); 
    CGContextRelease(ctx); 
    CGColorSpaceRelease(cs); 
    CGImageRelease(cgImageRef); 
    CGDataProviderRelease(provider); 
    free(pixels); 
    return image; 
} 
+0

おかげで、私はCIFilterと私の仕事を終える:Q –

0

1つの方法は、画像をテンプレートとして使用し、必要な色を設定することです。

extension UIImageView { 
func changeImageColor(color:UIColor) -> UIImage 
{ 
    image = image!.withRenderingMode(.alwaysTemplate) 
    tintColor = color 
    return image! 
} 
} 

    //Change color of logo 
    logoImage.image = logoImage.changeImageColor(color: .red) 
関連する問題