0

1 つのクラスには、tiangle.png や circle.png などの 5 つの UIImage で構成される配列があります。

現在のクラスには、色のリストがあります。UIImage をクリックして 1 つの色をクリックすると、現在の UIImage の色を変更できます。これは、画像をマスクし、その色を設定し、古い UIImage を選択した色の新しいものに置き換えることで実現されます。

しかし、メソッドには何か問題があり、色を変更する必要があります。

- (void) changeColor: (UITapGestureRecognizer*) gestureRecognizer{

    UIGraphicsBeginImageContext(test.newView.image.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGPoint loc = [gestureRecognizer locationInView:self.view];
    CGContextSetFillColorWithColor(context, [[self colorOfPoint:loc]CGColor]);
    CGContextTranslateCTM(context, 0, test.newView.image.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGRect rect = CGRectMake(test.newView.frame.origin.x,test.newView.frame.origin.x,   test.newView.image.size.width,test.newView.image.size.height);
    CGContextSetBlendMode(context, kCGBlendModeColorBurn);

    CGContextClipToMask(context, rect, test.newView.image.CGImage);
    CGContextAddRect(context, rect);
    CGContextDrawPath(context, kCGPathFill);

    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage* img = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);
    UIGraphicsEndImageContext();
    test.newView.image = img;

}

起こっている唯一のことは、クリックされた UIImage が不透明になることです。
この場合、UIImage を保持しているイメージビューは削除されません。

4

1 に答える 1

1

CGBitmapContextCreateImage() 呼び出しを使用して imageRef を取得することが、UIGraphics イメージ コンテキスト内で適切かどうかはわかりません。私が今までに見たすべての例は

  UIImage* image = UIGraphicsGetImageFromCurrentImageContext();

画像コンテキストを閉じる前に画像を取得します。あなたはそれを試すかもしれません。

于 2012-11-03T02:25:24.273 に答える