У меня есть PNG (с альфа-каналом), который я хочу объединить в CGContextRef с помощью CGContextDrawImage. Я бы хотел, чтобы каналы RBG были объединены, но я также хотел бы, чтобы альфа-канал исходных изображений также копировался.
В конечном итоге я передам окончательный CGContextRef (в форме CGImageRef) в GLKit, где я надеюсь управлять альфа-каналом для целей тонирования цвета с помощью фрагментного шейдера.
К сожалению, я сталкиваюсь с проблемами, когда дело доходит до создания атласа текстур с использованием Core Graphics. Похоже, что окончательный CGImageRef не может скопировать альфа-канал из моего исходного изображения и непрозрачен. Я прикрепил свой текущий код компоновки и копию моего тестового изображения ниже:
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
UInt8 * m_PixelBuf = malloc(sizeof(UInt8) * atlasSize.height * atlasSize.width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * atlasSize.width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(m_PixelBuf,
atlasSize.width,
atlasSize.height,
bitsPerComponent,
bytesPerRow,
colorSpace
kCGImageAlphaPremultipliedFirst);
CGContextDrawImage(context, CGRectMake(x, y, image.size.width, image.size.height), image.CGImage);
CGImageRef imgRef = CGBitmapContextCreateImage(context);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);