以下は、このサイトからコピーしたコードです。元のコードはコンパイルされないため、少し修正しました。私は、エッジ検出と最終的に単純な色の変更のためのバイト配列を操作したいが、最初に私は基本的なコードを働かせたい。現在、システムはコンパイルされて実行されます。それはひどく描かれた象を画面に表示します。私が画像に触れると、それは消えます。ステップスルーすると、imageWithDataの結果が0x0として表示されます。私はpngとbmpの両方で同じ結果を試しましたNSDataからUiImageを作成します。
私が間違っていることの手掛かりはありますか?
@interface ImageViewDrawable : UIImageView
// I am using the following code to initialize this ImageView
ImageViewDrawable * uiv = [[ImageViewDrawable alloc] initWithImage:[UIImage imageNamed:@"ele.png"] ];
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// get and work on pixel data
NSData* pixelData = (NSData*) CGDataProviderCopyData(CGImageGetDataProvider(self.image.CGImage));
char* bytes =[pixelData bytes];
// Take away the red pixel, assuming 32-bit RGBA
for(int i = 0; i < [pixelData length]; i += 4) {
bytes[i] = bytes[i]; // red
bytes[i+1] = bytes[i+1]; // green
bytes[i+2] = bytes[i+2]; // blue
bytes[i+3] = bytes[i+3]; // alpha
}
// convert pixel back to uiiimage
NSData* newPixelData = [NSData dataWithBytes:bytes length:[pixelData length]];
char * bytes2 =[pixelData bytes];
UIImage * newImage = [UIImage imageWithData:newPixelData] ;
[self setImage: newImage ];
}
私は本質的に既存のUIImageから供給されているデータは問題ではありませんか? –
私の問題がわかります。 CGDataProviderCopyData(CGImageGetDataProvider()) - このネストされた呼び出しセットは、データプロバイダを取得し、次にデータをコピーします。つまり、元の画像から残りの構成ではなく、ピクセルを取得するだけです。だから私はそれらのピクセルとあなたが参照したCG情報を使ってイメージを作り直さなければなりません。ヘルプありがとう –