首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自较大文件(像素格式、编解码器?)的UIImage失真

来自较大文件(像素格式、编解码器?)的UIImage失真
EN

Stack Overflow用户
提问于 2015-08-15 22:04:29
回答 1查看 323关注 0票数 0

我正在使用UIImages将UIBezierPath裁剪为UIGraphicsContext:

代码语言:javascript
复制
CGSize thumbnailSize = CGSizeMake(54.0f, 45.0f); // dimensions of UIBezierPath
UIGraphicsBeginImageContextWithOptions(thumbnailSize, NO, 0);
[path addClip];
[originalImage drawInRect:CGRectMake(0, originalImage.size.height/-3, thumbnailSize.width, originalImage.size.height)];
UIImage *maskedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

但出于某种原因,我的图像正垂直拉伸(一切看起来都有点长和瘦),而且这个效果越大,我的originalImage越大。我确信在我做这些操作之前,originalImages是非常好的(我已经检查过了)

我的图像都是9:16 (假设72 if宽128 if高),如果这很重要的话。

我看到UIGraphics用"ARGB 32位整数像素格式使用主机字节顺序“创建了一个位图;当涉及像素格式时,我会承认有一点无知,但我觉得这可能是相关的,因为我不确定这是否与我用来编码图片数据的像素格式相同。

不知道这有多重要,但下面是完整的处理管道:我使用AVFoundation捕获,并将photoSettings设置为

代码语言:javascript
复制
NSDictionary *photoSettings = @{AVVideoCodecKey : AVVideoCodecH264};

使用captureStillImageAsynchronouslyFromConnection:..捕获,然后使用[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];将其转换为NSData,然后通过创建CGDataProviderRefWithCFData并使用CGImageSourceCreateThumbnailAtIndex转换为CGImageRef并从中获取UIImage,从而缩小到缩略图。

稍后,我再次使用NSData将其转换为UIImageJPEGRepresentation(thumbnail, 0.7),以便存储。最后,当我准备好显示时,我会在[self maskImage:[UIImage imageWithData:imageData] toPath:_thumbnailPath]顶部调用自己的方法,并将其显示在UIImageView上,并设置contentMode = UIViewContentModeScaleAspectFit

如果我用UIBezierPath掩蔽UIBezierPath的方法很好,我可能最终会显式地用[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, nil]设置photoOutput设置,并且I可能会使用类似于如何将CVImageBufferRef转换为UIImage的东西,并更改大量代码.但我真的不想那么做,除非完全必要,因为,正如我所提到的,我真的不太了解视频编码/所有这些图形化的、低级别的对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-15 22:09:00

这一行:

代码语言:javascript
复制
[originalImage drawInRect:CGRectMake(0, originalImage.size.height/-3, thumbnailSize.width, originalImage.size.height)];

是个问题。您正在绘制originalImage,但您指定了thumbnailSize.width的宽度和originalImage的高度。这会扰乱图像的纵横比。

您需要基于相同图像大小的宽度和高度。根据需要选择一个,以保持适当的纵横比。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32029840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档