1

CGRect(rect)とUIImage()が与えられたimage場合、長方形の画像ピクセルのアルファ値(のみ)をどのように取得しますか?

次のコードは、画像や長方形に関係なく、常に0アルファを返します。

CGContextRef context = CGBitmapContextCreate(NULL,
                                             rect.size.width,
                                             rect.size.height,
                                             8,
                                             rect.size.width,
                                             NULL,
                                             kCGImageAlphaOnly);

UIGraphicsPushContext(context);
[image drawInRect:rect];
char *pixels = CGBitmapContextGetData(context);
NSUInteger pixelCount = rect.size.width * rect.size.height;
for (int i = 0; i < pixelCount; i++)
{
    char pixel = pixels[i];
    CGFloat alpha = pixel / 255.0;
    NSLog(@"%f", alpha);
}
UIGraphicsPopContext();
CGContextRelease(context);
4

5 に答える 5

0

これはあなたに役立つはずだと思います.. https://github.com/OgreSwamp/ObjFloodFill

于 2013-03-04T08:30:08.947 に答える
0

RGBA 値に関する私の経験では、それらはすべて unsigned char でなければなりません。この画像の不透明度が 1 の場合、signed char は 127 で停止し、完全な 255 値に到達しないため、これが問題を引き起こした可能性があると推測しています。

于 2013-02-26T02:44:20.223 に答える
0

pixelData[index + 3]アルファの値になります。pixelData[0-2]はそれぞれRGB

CFDataRef theData;

    theData = CGDataProviderCopyData(CGImageGetDataProvider(sourceImage));

    CFMutableDataRef mutableData = CFDataCreateMutableCopy(0, 0, theData);

    UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(mutableData);

    int dataLength = CFDataGetLength(mutableData);

    for (int index = 0; index < dataLength; index += 4) {
       //code here for just alpha
       pixelData[index + 3]
    }
于 2013-02-21T18:48:46.537 に答える
0

過去に、CGBitmapContext が正常に機能しない問題がありました。に問題があったとしても驚かないでしょうkCGImageAlphaOnly。のような「主流」のピクセル形式のいくつかを使用して、いくつかの健全性チェックを行うことができますkCGImageAlphaPremultipliedFirst

次を使用して画像を描画することもできますCGImageDrawImage

CGContextRef context = CGBitmapContextCreate(NULL,
                                         rect.size.width,
                                         rect.size.height,
                                         8,
                                         rect.size.width,
                                         NULL,
                                         kCGImageAlphaOnly);

CGContextDrawImage( context, rect, image.CGImage);

//etc...

CGContextRelease(context);
于 2013-02-26T01:13:32.360 に答える