1

App Storeのアイコンの影のように、画像に小さな影を追加しようとしています。現在、次のコードを使用して画像の角を丸めています。小さな影を追加するために私がそれをどのように適応させることができるか誰かが知っていますか?

- (UIImage *)roundCornersOfImage:(UIImage *)source height:(int)height width:(int)width  {
    int w = width;
    int h = height;
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef imageContext = CGBitmapContextCreate(NULL, w, h, 8, 4 * w, colorSpace, kCGImageAlphaPremultipliedFirst);

    CGContextBeginPath(imageContext);

    CGRect rect = CGRectMake(0, 0, w, h);
    addRoundedRectToPath(imageContext, rect, 10, 10);
    CGContextClosePath(imageContext);
    CGContextClip(imageContext);

    CGContextDrawImage(imageContext, CGRectMake(0, 0, w, h), source.CGImage);

    CGImageRef imageMasked = CGBitmapContextCreateImage(imageContext);
    CGContextRelease(imageContext);
    CGColorSpaceRelease(colorSpace);
    
    return [UIImage imageWithCGImage:imageMasked];    
}

addRoundedRectToPath明らかに角を丸める別の方法を指します。

4

1 に答える 1

6

まず、ドキュメントへのリンクを次に示します。

http://developer.apple.com/iPhone/library/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadows/dq_shadows.html#//apple_ref/doc/uid/TP30001066-CH208-TPXREF101

次に、CGContextDrawImage(...) の呼び出しの直前に次のようなものを追加してみてください。

CGFloat components[4] = {0.0, 0.0, 0.0, 1.0};
CGColorRef shadowColor = CGColorCreate(colorSpace, components);
CGContextSetShadowWithColor(imageContext, CGSizeMake(3, 3), 2, shadowColor);
CGColorRelease(shadowColor);

CGContextSetShadowWithColor(.....) を呼び出した後、すべてが (3, 3) ポイントだけオフセットされた影で描画され、2.0 ポイントのぼかし半径で描画されます。おそらく、黒色 (コンポーネントの 4 番目のコンポーネント) の不透明度を微調整し、シャドウ パラメータを変更したいと思うでしょう。

ある時点で影付きの描画を停止したい場合は、CGContextSetShadowWithColor を呼び出す前にグラフィックス コンテキストを保存し、影付きの描画を停止したいときに復元する必要があります。

于 2009-06-07T23:36:18.963 に答える