あなたがImageMagickののコマンドへのObjective Cの実装と同等持っていますか:アルファマスク抽出プロセスのObjective Cの実装
convert -alpha Extract -type optimize -strip -quality 60 +dither Source.png Alpha.jpg
を私は今、どんな解決策を見つけることができませんでした。 私はマスクは、コードスニペットを使用して作成されたPNGからアルファを抽出し、JPGグレースケール
に保存しますAlphaExtractorスニペットを探してい:
CGImageRef createMaskWithImage(CGImageRef image)
{
int maskWidth = CGImageGetWidth(image);
int maskHeight = CGImageGetHeight(image);
// round bytesPerRow to the nearest 16 bytes, for performance's sake
int bytesPerRow = (maskWidth + 15) & 0xfffffff0;
int bufferSize = bytesPerRow * maskHeight;
// we use CFData instead of malloc(), because the memory has to stick around
// for the lifetime of the mask. if we used malloc(), we'd have to
// tell the CGDataProvider how to dispose of the memory when done. using
// CFData is just easier and cleaner.
CFMutableDataRef dataBuffer = CFDataCreateMutable(kCFAllocatorDefault, 0);
CFDataSetLength(dataBuffer, bufferSize);
// the data will be 8 bits per pixel, no alpha
CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericGray);//CGColorSpaceCreateDeviceGray();
CGContextRef ctx = CGBitmapContextCreate(CFDataGetMutableBytePtr(dataBuffer),
maskWidth, maskHeight,
8, bytesPerRow, colorSpace, kCGImageAlphaNone);
// drawing into this context will draw into the dataBuffer.
CGContextDrawImage(ctx, CGRectMake(0, 0, maskWidth, maskHeight), image);
CGContextRelease(ctx);
// now make a mask from the data.
CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(dataBuffer);
CGImageRef mask = CGImageMaskCreate(maskWidth, maskHeight, 8, 8, bytesPerRow,
dataProvider, NULL, FALSE);
CGDataProviderRelease(dataProvider);
CGColorSpaceRelease(colorSpace);
CFRelease(dataBuffer);
return mask;
}
と保存:
CGContextDrawImage(ctx, CGRectMake(0, 0, maskWidth, maskHeight), image);
が抽出されていません。
どうすれば問題を解決できますか? – bpds
私は確かではありませんが、誰かがもっと知っていない限り、少し後で遊んでみるつもりです。 – cobbal
私は解決策を見つけました – bpds