Video editor fixes

This commit is contained in:
Ilya Laktyushin 2020-05-28 19:31:45 +03:00
parent be8086b3d5
commit e412e21db8
2 changed files with 33 additions and 12 deletions

View File

@ -1451,6 +1451,8 @@
{
if (fabs(_scrubberView.trimStartValue - adjustments.trimStartValue) > DBL_EPSILON)
{
UIImage *paintingImage = _paintingImageView.image;
[[SQueue concurrentDefaultQueue] dispatch:^
{
AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc] initWithAsset:_player.currentItem.asset];
@ -1476,8 +1478,8 @@
[image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)];
if (_paintingImageView.image != nil)
[_paintingImageView.image drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)];
if (paintingImage != nil)
[paintingImage drawInRect:CGRectMake(0, 0, fillSize.width, fillSize.height)];
thumbnailImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

View File

@ -382,17 +382,36 @@
CIImage *resultImage = request.sourceImage;
CGSize size;
CGPoint offset = CGPointZero;
CGPoint finalOffset = CGPointZero;
if (backgroundCIImage != nil) {
resultImage = backgroundCIImage;
size = backgroundCIImage.extent.size;
} else if ([adjustments cropAppliedForAvatar:false]) {
size = resultImage.extent.size;
CGRect cropRect = adjustments.cropRect;
cropRect = CGRectMake(cropRect.origin.x, size.height - cropRect.size.height - cropRect.origin.y, cropRect.size.width, cropRect.size.height);
offset = CGPointMake(cropRect.origin.x, -cropRect.origin.y);
if ([adjustments cropAppliedForAvatar:false]) {
CGRect cropRect = adjustments.cropRect;
CGFloat ratio = resultImage.extent.size.width / cropRect.size.width;
CGSize extendedSize = CGSizeMake(adjustments.originalSize.width * ratio, adjustments.originalSize.height * ratio);
CIImage *image = [[CIImage alloc] initWithColor:[CIColor colorWithRed:0.0f green:0.0f blue:0.0f]];
image = [image imageByCroppingToRect:CGRectMake(0.0, 0.0, extendedSize.width, extendedSize.height)];
cropRect = CGRectMake(cropRect.origin.x * ratio, (adjustments.originalSize.height - cropRect.size.height - cropRect.origin.y) * ratio, cropRect.size.width * ratio, cropRect.size.height * ratio);
resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(cropRect.origin.x, cropRect.origin.y)];
finalOffset = CGPointMake(-cropRect.origin.x, -cropRect.origin.y);
image = [resultImage imageByCompositingOverImage:image];
resultImage = image;
size = resultImage.extent.size;
}
} else {
size = resultImage.extent.size;
if ([adjustments cropAppliedForAvatar:false]) {
CGRect cropRect = adjustments.cropRect;
cropRect = CGRectMake(cropRect.origin.x, adjustments.originalSize.height - cropRect.size.height - cropRect.origin.y, cropRect.size.width, cropRect.size.height);
finalOffset = CGPointMake(-cropRect.origin.x, -cropRect.origin.y);
}
}
void (^process)(CIImage *, void(^)(void)) = ^(CIImage *resultImage, void(^unlock)(void)) {
@ -411,15 +430,15 @@
for (CIImage *image in images) {
mergedImage = [image imageByCompositingOverImage:mergedImage];
}
if (!CGPointEqualToPoint(offset, CGPointZero)) {
mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)];
if (!CGPointEqualToPoint(finalOffset, CGPointZero)) {
mergedImage = [mergedImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)];
}
[request finishWithImage:mergedImage context:ciContext];
unlock();
}];
} else {
if (!CGPointEqualToPoint(offset, CGPointZero)) {
resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(offset.x, offset.y)];
if (!CGPointEqualToPoint(finalOffset, CGPointZero)) {
resultImage = [resultImage imageByApplyingTransform:CGAffineTransformMakeTranslation(finalOffset.x, finalOffset.y)];
}
[request finishWithImage:resultImage context:ciContext];
unlock();