UIImage を CIImage から適切に構築するために、さまざまなオプションやトリックを試してきました。しかし、CIImage を作成するたびに、その色が反転しているように見えます。
私が持っている最新のコードは次のとおりです。
NSURL *url = [[NSBundle mainBundle] URLForResource:@"C4Sky" withExtension:@"png"];
CIImage *c = [CIImage imageWithContentsOfURL:url];
UIImage *i = [UIImage imageWithCIImage:c];
UIImageView *uiiv = [[UIImageView alloc] initWithImage:i];
[self.canvas addSubview:uiiv];
これにより、次の画像が生成されます。
ただし、次のようなイメージを構築します。
UIImage *i = [UIImage imageNamed:@"C4Sky"];
UIImageView *uiiv = [[UIImageView alloc] initWithImage:i];
[self.canvas addSubview:uiiv];
... 次の画像を生成します。
CIImage を構築するさまざまな方法を試しました。
- https://stackoverflow.com/a/7788510/1218605
- http://www.raywenderlich.com/5689/beginning-core-image-in-ios-5
- [CIImage imageWithData:UIImagePNGRepresentation(img)];
- 他のほぼすべての CIImage コンストラクター...
これは、iOS の CIImage のピクセル形式が ARGB であるためですか? (現在 iOS6 で可能なフォーマットはこれだけのようです)
もしそうなら、どうすればこのCIImageが正常に見えるようにピクセルフォーマットを交換できますか?
私が試した主要なさまざまな方法をすべて示す git のプロジェクト リポジトリを作成しました (それぞれのバリエーションは含まれません)。6 つの方法があり、最初の 5 つは失敗します。
https://github.com/C4Code/CIImageTest
最後の方法は機能しますが、本当に汚いです:
-(void)test6 {
UIImage *img = [UIImage imageNamed:@"C4Sky"];
CGContextRef bitmapContext = NULL;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;
CGSize size = img.size;
bitmapBytesPerRow = (size.width * 4);
bitmapByteCount = (bitmapBytesPerRow * size.height);
bitmapData = malloc( bitmapByteCount );
bitmapContext = CGBitmapContextCreate(bitmapData, size.width, size.height,8,bitmapBytesPerRow,
CGColorSpaceCreateDeviceRGB(),kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(bitmapContext, (CGRect){CGPointZero,size}, img.CGImage);
CGImageRef imgRef = CGBitmapContextCreateImage(bitmapContext);
CIImage *cii = [CIImage imageWithCGImage:imgRef];
UIImage *finalImage = [UIImage imageWithCIImage:cii];
UIImageView *uiiv = [[UIImageView alloc] initWithImage:finalImage];
[self.canvas addSubview:uiiv];
//works but it's dirrrrrrrty
}
UIImage から自分のグラフィックス コンテキストに描画しています。これが機能するため、CIImage のネイティブ実装にバグがある可能性があると思います。つまり、UIImage から CIImage を作成することはできません... 繰り返しますが、私が考えることができる唯一のことは、CIImage が ARGB 空間にあり、UIImage がそうではないということです...しかし、私は知りませんこれを回避する方法は?
これはバグですか?