Abrufen eines Pixel-Alpha-Werts für ein UIImage

Ich versuche gerade, den Alpha-Wert eines Pixels in einer UIImageView zu ermitteln. Ich habe das CGImage von [UIImageView image] erhalten und daraus ein RGBA-Byte-Array erstellt. Alpha ist vormultipliziert.

<code>CGImageRef image = uiImage.CGImage;
NSUInteger width = CGImageGetWidth(image);
NSUInteger height = CGImageGetHeight(image);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
rawData = malloc(height * width * 4);
bytesPerPixel = 4;
bytesPerRow = bytesPerPixel * width;

NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(
    rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace,
    kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big
);
CGColorSpaceRelease(colorSpace);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), image);
CGContextRelease(context);
</code>

Ich berechne dann den Array-Index für den angegebenen Alphakanal unter Verwendung der Koordinaten aus der UIImageView.

<code>int byteIndex = (bytesPerRow * uiViewPoint.y) + uiViewPoint.x * bytesPerPixel;
unsigned char alpha = rawData[byteIndex + 3];
</code>

Ich erhalte jedoch nicht die Werte, die ich erwarte. Für einen vollständig schwarzen transparenten Bereich des Bildes erhalte ich Werte ungleich Null für den Alphakanal. Muss ich die Koordinaten zwischen UIKit und Core Graphics übersetzen - d. H .: Ist die y-Achse invertiert? Oder habe ich vormultiplizierte Alpha-Werte falsch verstanden?

Aktualisieren:

@Nikolai Ruhes Vorschlag war der Schlüssel dazu. Tatsächlich musste ich nicht zwischen UIKit-Koordinaten und Core Graphics-Koordinaten übersetzen. Nach dem Einstellen des Mischmodus entsprachen meine Alpha-Werte jedoch meinen Erwartungen:

<code>CGContextSetBlendMode(context, kCGBlendModeCopy);
</code>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage