Изменить прозрачность для UIImage (не UIImageView) - PullRequest
2 голосов
/ 31 марта 2012

Я использую AVAssetWriterInputPixelBufferAdaptor для создания видео из массива UIImage, и я хочу изменить переход от одного изображения к другому в различных формах анимации (очень похоже на слайд-шоу ... фактически точно как слайд-шоу).

Один из этих переходных стилей исчезает.так как я пишу UIImages вот так ..

    UIImage *image = imageView.image;
    UIImage *resizedImage = [ICVideoViewController imageWithImage:image scaledToSize:CGSizeMake(640, 480)];
    CGImageRef img = [resizedImage CGImage];
    CVPixelBufferRef buffer = [ICVideoViewController pixelBufferFromCGImage:img size:CGSizeMake(640, 480)];

    [adaptor appendPixelBuffer:buffer withPresentationTime:CMTimeMake(i, 1)];

Я хотел бы знать, возможно ли (без необходимости вручную манипулировать пикселями) добиться этого ..?

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Как насчет смешивания двух изображений, которые вы переходите?

См. Следующую ветку: Смешайте два изображения на основе альфа / прозрачности верхнего изображения

2 голосов
/ 31 марта 2012

Я не знаю, как вы создаете изображение в функции imagawithimage вашего контроллера вида.

Если вы используете CGContext для масштабирования изображения, используйте CGContextSetAlpha() до CGContextDrawImage().

Если вы не можете сделать еще одну вещь, несомненно, вам нужно будет написать для этого еще несколько строк, но это может быть одним из способов:

CGSize size = [self size];
int width = size.width;
int height = size.height;

// the pixels will be painted to this array
uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));

// clear the pixels so any transparency is preserved
memset(pixels, 0, width * height * sizeof(uint32_t));

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

// create a context with RGBA pixels
CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, 
                                             kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);

// paint the bitmap to our context which will fill in the pixels array
CGContextSetAlpha(context, 0.5);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), [self CGImage]);
CGImageRef image = CGBitmapContextCreateImage(context);

CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
free(pixels);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...