シンプルで効果的なエンボスエフェクトはCore Graphicsで行っています。 素晴らしいです!コアグラフィックエフェクト:シミュレータでは動作しますが、デバイスでは動作しません
私は以下の通りです何をすべきか:しかし、唯一のシミュレータで...ここ は結果である - 撮影画像から、それが持っている場合、私はアルファを取り出し、私は白でそれを埋めます。 - Iグレースケール に、このRGB画像を変換する - 私は、この画像の色を反転
私は、パラメータを使用して効果を作成するために、カスタムメソッドを呼び出します。
- canvasImg:上マスクする半透明の画像
- maskImg:私はちょうど作成した画像、グレースケール反転:
- opacitity:得られた画像
方法は、単純なマスクを作るの不透明度は、影とoppacityを適用し、真新しいUIImageを返します。 私はなぜそれが動作しないのか、デバイスであるのか理解できません。 デバイスで実行中に、私はnull以外のUIImageを取得します。 助けてください!ここ
コードである:また
- (UIImage *)stampImage:(UIImage *)canvasImg withMask:(UIImage *)maskImg withOpacity:(CGFloat)opacity
{
//Creating the mask Image
CGContextRef mainViewContentContext;
CGColorSpaceRef colorSpace;
colorSpace = CGColorSpaceCreateDeviceRGB();
mainViewContentContext = CGBitmapContextCreate(NULL, maskImg.size.width, maskImg.size.height, 8, 0, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);
if (mainViewContentContext == NULL) return NULL;
CGContextClipToMask(mainViewContentContext, CGRectMake(0, 0, maskImg.size.width, maskImg.size.height), maskImg.CGImage);
CGContextDrawImage(mainViewContentContext, CGRectMake(0, 0, maskImg.size.width, maskImg.size.height), canvasImg.CGImage);
CGContextSetAllowsAntialiasing(mainViewContentContext, true);
CGContextSetShouldAntialias(mainViewContentContext, true);
CGImageRef mainViewContentBitmapContext = CGBitmapContextCreateImage(mainViewContentContext);
CGContextRelease(mainViewContentContext);
UIImage *maskedImage = [UIImage imageWithCGImage:mainViewContentBitmapContext];
CGImageRelease(mainViewContentBitmapContext);
//Giving some Drop shadows
CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef shadowContext = CGBitmapContextCreate(NULL, maskedImage.size.width + 10, maskedImage.size.height + 10,
CGImageGetBitsPerComponent(maskedImage.CGImage), 0,
colourSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colourSpace);
CGContextSetShadowWithColor(shadowContext, CGSizeMake(0, -1), 1, [UIColor colorWithWhite:1.0 alpha:0.3].CGColor);
CGContextSetAllowsAntialiasing(shadowContext, true);
CGContextSetShouldAntialias(shadowContext, true);
CGContextDrawImage(shadowContext, CGRectMake(0, 10, maskedImage.size.width, maskedImage.size.height), maskedImage.CGImage);
CGImageRef shadowedCGImage = CGBitmapContextCreateImage(shadowContext);
CGContextRelease(shadowContext);
UIImage *stampImg = [UIImage imageWithCGImage:shadowedCGImage];
CGImageRelease(shadowedCGImage);
return stampImg;
}
端末ではどのような結果が表示されますか? –
単に 'nil'を返せば' mainViewContentContext'が 'NULL'ではないことを確認しましたか? 'CGBitmapContextCreate()'への許可された入力はデスクトップ対デバイスで異なる可能性があります –
ありがとうKevin。私はCGBitmapContextCreate()について考えないでください、それは問題かもしれません。私はそれを見てみましょう。 – DZenBot