:バイアスは、読み取り:C4イメージのピクセルカラーを取得しようとしていますが、イメージカラーマトリックスにアクセスするにはどうすればいいですか?色colorMatrixの議論においてc4framework
を次のように、このフィルタは、色ベクトルを変換するために、行列乗算を行う:
SR =ドット(S、redVector)SG
さまざまな色ベクトルのデータ値にアクセスする方法はありますか?(ドット、 ?
:バイアスは、読み取り:C4イメージのピクセルカラーを取得しようとしていますが、イメージカラーマトリックスにアクセスするにはどうすればいいですか?色colorMatrixの議論においてc4framework
を次のように、このフィルタは、色ベクトルを変換するために、行列乗算を行う:
SR =ドット(S、redVector)SG
さまざまな色ベクトルのデータ値にアクセスする方法はありますか?(ドット、 ?
C4のドキュメントで言及している議論は、フィルターが行列の乗算を計算するために使用するプロセスを指します。これは実際には、フィルタが適用されたときに画像内の色に対してフィルタが何を行うかの説明です。
メソッドがCIColorMatrix
というCIFilter
を設定し、これをC4Image
に適用するということが実際に行われています。残念ながら、CIColorMatrix
フィルタのソースコードはAppleによって提供されていません。
だから、あなたの質問にlongwinded答えは:
あなたはCIColorMatrix
フィルターを通してC4Image
内のピクセルの色コンポーネントにアクセスすることはできません。しかし、C4Image
クラスにはピクセルデータを取得するために使用できるCGImage
(たとえばyourC4Image.CGImage
)というプロパティがあります。 私はこの質問での最後の夜取りつかれ、とC4Imageクラスにこれらの2つのメソッドを追加しまっ:ロード画素データの
方法:
良い、シンプルな技術がHERE
EDITを見つけることができます
-(void)loadPixelData {
NSUInteger width = CGImageGetWidth(self.CGImage);
NSUInteger height = CGImageGetHeight(self.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
bytesPerPixel = 4;
bytesPerRow = bytesPerPixel * width;
rawData = malloc(height * bytesPerRow);
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), self.CGImage);
CGContextRelease(context);
}
画素色にアクセスするための方法:
-(UIColor *)colorAt:(CGPoint)point {
if(rawData == nil) {
[self loadPixelData];
}
NSUInteger byteIndex = bytesPerPixel * point.x + bytesPerRow * point.y;
CGFloat r, g, b, a;
r = rawData[byteIndex];
g = rawData[byteIndex + 1];
b = rawData[byteIndex + 2];
a = rawData[byteIndex + 3];
return [UIColor colorWithRed:RGBToFloat(r) green:RGBToFloat(g) blue:RGBToFloat(b) alpha:RGBToFloat(a)];
}
これは、私が言及した他の投稿から技術を適用する方法です。