You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将CVPixelBuffer适应一个正方形图像,并保持长宽比?

可以使用Core Graphics(CoreGraphics.framework)库来操作CVPixelBuffer,并将其转换为UIImage。然后,可以将UIImage转换为正方形,同时保持原始宽高比。

以下是Swift本的示例:

func pixelBufferToSquareImage(pixelBuffer: CVPixelBuffer) -> UIImage? {
    // Get the width and height of the pixel buffer
    let width = CVPixelBufferGetWidth(pixelBuffer)
    let height = CVPixelBufferGetHeight(pixelBuffer)
    
    // Create CGImage from pixel buffer
    let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
    let ciContext = CIContext()
    guard let cgImage = ciContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: width, height: height)) else {
        return nil
    }
    
    // Determine the size of the square image that will contain the original image
    let sideLength = min(width, height)
    let newSize = CGSize(width: sideLength, height: sideLength)
    
    // Create an UIImage from the CGImage and resize it to the new size
    let uiImage = UIImage(cgImage: cgImage)
    let scaledImage = uiImage.resizeTo(size: newSize)
    
    return scaledImage
}

extension UIImage {
    func resizeTo(size: CGSize) -> UIImage? {
        let scale = UIScreen.main.scale
        let newSize = CGSize(width: size.width * scale, height: size.height * scale)
        UIGraphicsBeginImageContextWithOptions(newSize, false, scale)
        draw(in: CGRect(x: 0, y: 0, width: newSize.width, height: newSize.height))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }
}

要使用此方法,请调用pixelBufferToSquareImage()函数并将您的CVPixelBuffer作为输入参数传递。此方法将返回一个UIImage对象,其中包含您的CVPixelBuffer转换为正方形后的图像。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

VikingDB:大规模云原生向量数据库的前沿实践与应用

无法保证检索到的结果一定是确定性的、和查询最相关的 topk 条数据,因此 **检索精度是向量检索性能的一个重要评估指标** 。延时和精度一般是一对互斥的指标,二者无法兼得。![picture.image](https://p3-volc-c... VikingDB 为不同过滤比例的场景设计了不同的过滤流程,并提前预估过滤比例,来自适应地调整执行计划,以达到最佳的检索性能,加上对某些特殊场景的功能支持,VikingDB 实现了如下所列的技术优势:* 对 HNSW,IVF,Flat 索...

【MindStudio训练营第一季】基于MindX的U-Net网络的工业质检实践作业

图像分类等;Atlas 300I推理卡提供超强AI推理性能,以超强算力加速应用,可广泛应用于推理场景。在软件方面,为了帮助开发者跨越AI应用落地制造行业的三大鸿沟,华为提供了全栈软件平台与工具。特别是昇腾应用使能Min... 并启动业务流程。Stream manager对外提供接口,用于向stream发送数据和获取结果,帮助用户实现业务对接。plugin表示业务流程中的基础模块,通过element的串接构建成一个stream。buffer用于内部挂载解码前后的视频、...

Maven依赖冲突避坑指北

将图形设置为实际尺寸或放大,可以看到每个红线的指向,即冲突的依赖,但这样的红线,多得数不胜数。那么,我姑且用"**依赖健康度** "来衡量冲突的严重程度吧,虽然业界暂时没有类似手机清理管家那种扫描服务依赖健康度... ```**何谓就近原则?**随着工程逐步迭代,依赖管理成本也会逐步增加。为了避免各个库不可避免地声明使用了相同的库所带来的歧义,Maven又额外引入了一种机制,也就是"就近原则"。就近原则保证了在工程的依赖树中...

web端实现AR人脸特效 | 社区征文

## 架构和概念抽象整体的实现思路如下```mermaidgraph TDA[调取Camera获得相机画面] --> B[使用tensorflow加载人脸识别模型生成FaceMesh] --> C[根据FaceMesh生成三角网格并进行UV贴图]```###### FaceMesh... 我们就可以将二维的图像纹理粘贴到三维的物体表面。![image.png](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/16472b9cc15f4d8ca1c3c1e9a11b95d5~tplv-k3u1fbpfcp-watermark.image?) 矩形贴图和球面的映...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

如何将CVPixelBuffer适应一个正方形图像,并保持长宽比? -优选内容

类型详情
图片分辨率超过 1080P 时,图片会被等比缩放至和视频一致。图片和视频宽高比一致时,图片会被直接缩放至和视频一致。图片和视频长宽比不一致时,为保证图片内容不变形,图片按短边缩放至与视频帧一致,使图片填满视频帧... kMixedStreamClientMixVideoFormatCVPixelBufferBGRA 2 CVPixelBuffer BGRA。iOS 默认回调格式。支持系统: iOS。 kMixedStreamClientMixVideoFormatNV12 3 YUV NV12。macOS 默认回调格式。支持系统: macOS。 Mix...
客户端 SDK
支持使用静态图片填充本地推送的视频流。 SetDummyCaptureImagePath 跨房间转发媒体流,适用于跨房间连麦等场景。 StartForwardStreamToRooms StopForwardStreamToRooms UpdateForwardStreamToRooms PauseForwardSt... CVideoSinkPixelFormat ByteRTCVideoSinkPixelFormat PixelFormat PixelFormat 新增设置用户可见性结果回调,参看: 功能简述 Android iOS macOS Windows Linux Electron 用户可见性回调 onUserVisibilityChanged r...
类型详情
这一过程不保证等比缩放。这一过程不保证等比缩放。 kVideoStreamScaleModeFitWithCropping 2 视窗填满优先。视频帧等比缩放,直至视窗被视频填满。如果视频帧长宽比例与视窗不同,视频帧的多出部分将无法显示。缩放... 图片等静态画面。 VideoEncoderConfig csharp public struct bytertc.VideoEncoderConfig视频流参数描述。 Defined in : IRTCVideo.cs 成员变量类型 名称 Width 视频宽度,单位:px Height 视频高度,单位:px FrameRa...
进阶功能
希望将推流 SDK 作为推流引擎使用,可参考以下外部采集源推流功能的使用方式。 外部视频源 推流引擎支持传入 OpenGL 纹理 、NSData 二进制数据、CVPixelBuffer 和 CMSampleBufferRef 格式的视频数据。 说明 二进制数... 将视频尺寸等比缩放,保证视频内容全部显示。未填满的区域会被背景颜色填充。 VeLivePusherRenderModeFill 视频帧自适应画布:视频帧非等比缩放,填满画布,可能会导致视频帧的长宽比例变化。 objectivec VeLiveStrea...

如何将CVPixelBuffer适应一个正方形图像,并保持长宽比? -相关内容

进阶功能

本章节介绍了拉流 SDK 进阶功能的接入方式,支持的进阶功能包括但不限于 RTM 协议拉流、QUIC 协议拉流、使用 IP 地址拉流、使用主备流、多档位切换、自适应码率(ABR)拉流、截图、SEI、以及订阅视频和音频数据。您可... pixelFormat VeLivePlayerPixelFormat 视频帧像素格式 width NSInteger 视频帧的宽度,单位为 px height NSInteger 视频帧的高度,单位为 px pts int64_t 视频帧的渲染时间戳,单位为 ms pixelBuffer CVPixelBufferRe...

类型详情

成员变量类型 名称 VeLivePlayerVideoBufferType bufferType VeLivePlayerPixelFormat pixelFormat NSInteger width NSInteger height int64_t pts CVPixelBufferRef pixelBuffer CMSampleBufferRef sampleBuffer... 视频帧等比缩放,直至填满画布,超出屏幕的部分将被裁剪,画面可能不完整。 VeLivePlayerFillModeAspectFit 1 显示完整的视频帧。视频帧等比缩放,直至视频帧恰好在画布上全部显示。如果视频帧长宽比例与画布不同,视窗...

Native 端自定义视频渲染

比如存储为图片、增加视频特效等。 前提条件你已经集成了 3.25 及以上版本的 RTC SDK,实现了基本的音视频通话。 功能说明将 RTC SDK 在本地采集的视频图像或远端用户的视频图像通过自定义的渲染模块进行渲染。 说明... @end@implementation CustomVideoRenderView/** * 视频帧回调 * @param pixelBuffer 视频的 PixelBuffer * @param rotation 视频旋转角度,参看 ByteRTCVideoRotation * @param contentType 视频内部类型 参看 Byte...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

iOS(v4.1.0.0及以上)

SDK 的使用可以分为三个步骤: 初始化 SDK 使用 SDK 进行图像处理 SDK 参数设置,如设置美颜、贴纸、滤镜等 注意,特效 SDK 全程依赖 OpenGL 环境,请保证所有 SDK 的函数调用都处于同一个 GlContext 下。 1.初始化 SD... 它只能处理 2D 纹理并将结果输出到传入的 2D 纹理 outputTexture 中,如果当前的项目中无法直接拿到 2D 纹理,可以先试用 BEImageUtils 进行格式转换,这个类可以进行 CVPixelBuffer/Texture/Buffer 几种数据的转换,可...

VikingDB:大规模云原生向量数据库的前沿实践与应用

无法保证检索到的结果一定是确定性的、和查询最相关的 topk 条数据,因此 **检索精度是向量检索性能的一个重要评估指标** 。延时和精度一般是一对互斥的指标,二者无法兼得。![picture.image](https://p3-volc-c... VikingDB 为不同过滤比例的场景设计了不同的过滤流程,并提前预估过滤比例,来自适应地调整执行计划,以达到最佳的检索性能,加上对某些特殊场景的功能支持,VikingDB 实现了如下所列的技术优势:* 对 HNSW,IVF,Flat 索...

API 详情

ByteBuffer byteBuffer)视频帧初始化方法。 传入参数 参数名 类型 说明 width int 视频帧的宽度,单位为 px。 height int 视频帧的高度,单位为 px。 pts long 视频帧的时间戳,单位为 µs。 byteBuffer ByteBuffer ByteBuffer 格式的视频数据,ByteBuffer 默认为 I420 格式,如果您的视频数据为其他格式,可通过调用 setPixelFormat 方法设置 注意 调用该方法时,需要保证 YUV 数据的 stride 等于 width。 VeLiveVideoFramejava p...

进阶功能

本章节介绍了拉流 SDK 进阶功能的接入方式,支持的进阶功能包括但不限于 RTM 协议拉流、QUIC 协议拉流、使用 IP 地址拉流、使用主备流、多档位切换、自适应码率(ABR)拉流、截图、SEI、以及订阅视频和音频数据。您可... 格式类型 枚举 说明 视频帧像素格式VeLivePlayerPixelFormat VeLivePlayerPixelFormatRGBA32 RGBA32 VeLivePlayerPixelFormatTexture 2D 纹理 视频数据封装格式VeLivePlayerVideoBufferType VeLivePlayerVide...

Android(v4.1.0.0及以上)

需要确保该纹理是一张人脸为正的图像,如果是前置摄像头,需要同时完成镜像处理 dstTexture 输出纹理ID width 输入纹理宽度 height 输入纹理高度 sensorRotation 手机角度,通过手机传感器取得 timeStamp 当前时间,参见 timeStamp获取 处理结果: process 方法的输出为渲染后的 2D 纹理。 注意,不推荐使用 SDK 直接处理 buffer,SDK 最终需要接收的是待处理纹理,如需要处理 buffer,建议先将 buffer 转成纹理使用,但这会造成耗时增加。...

类型详情

适应画布。视频帧非等比缩放,直至画布被填满。在此过程中,视频帧的长宽比例可能会发生变化。 VeLivePusherRenderModeFit 1 视频帧内容全部显示优先。视频尺寸等比缩放,优先保证视频内容全部显示。当视频尺寸与显示... VeLiveAudioBufferType java public enum VeLiveAudioBufferType推流音频数据类型。 枚举值类型 值 说明 VeLiveAudioBufferTypeUnknown 0 未知的音频数据类型。 VeLiveAudioBufferTypeByteBuffer 1 ByteBuffer 音...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询