1

私は CGImageCreateWithImageInRect を使用して拡大効果を行っていますが、ビューの端に近づいた場合を除いて、美しく機能します。その場合、クリッピングによって画像が歪んでしまいます。現在、ビューの 72x72 チャンクを取得し、それに丸いマスクを適用してから、マスクされた画像とその上に円を描画します。

コピーされたチャンクがビューの端近くにある場合、クリッピングのために 72x72 よりも小さくなり、虫眼鏡で描画すると引き伸ばされます。

たとえば、タッチポイントが左端に近い場合、左の部分が単色で塗りつぶされ、右半分に拡大されたビューの一部が含まれる画像を作成したいと思います。次に、その画像にマスクを適用し、その上にオーバーレイを追加します。

これが私が今していることです。imageRef は拡大されるイメージ、mask は丸いマスク、overlay は拡大領域のエッジをマークする円です。

CGImageRef subImage = CGImageCreateWithImageInRect(imageRef, CGRectMake(touchPoint.x - 36, touchPoint.y - 36, 72, 72));
CGImageRef xMaskedImage = CGImageCreateWithMask(subImage, mask);

CGContextRef context = UIGraphicsGetCurrentContext();
CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
CGContextConcatCTM(context, xform);

CGRect area = CGRectMake(touchPoint.x - 84, -touchPoint.y, 170, 170);
CGRect area2 = CGRectMake(touchPoint.x - 80, -touchPoint.y + 4, 160, 160);
CGContextDrawImage(context, area2, xMaskedImage);
CGContextDrawImage(context, area, overlay);
4

1 に答える 1

0

CGBitmapContextCreate() を使用してビットマップ コンテキストを作成することで、これを解決しました。次に、キャプチャした領域をこのコンテキストの小さな領域に描画し、そこから CGBitmapContextCreateImage() を使用して画像を作成しました。それがパズルの欠けていたピースでした。

于 2010-08-27T12:02:41.663 に答える