CGImageRef 宽度与每行字节数不一致

2023-12-09

我正在尝试从屏幕缓冲区中读取像素,我正在创建一个CGImageRef with CGDisplayCreateImage,但值CGImageGetWidth and CGImageGetBytesPerRow在一起没有意义,将每行字节数除以每像素字节数得到每行 1376 个像素,但图像的宽度是 1366。

这里发生了什么?图像中是否有某种填充?如何安全地读取我从中获取的数据并获得正确的结果?

编辑:重现此问题所需的最少代码如下:

#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        CGImageRef image = CGDisplayCreateImage(CGMainDisplayID());

        size_t width = CGImageGetWidth(image);
        size_t bpr = CGImageGetBytesPerRow(image);
        size_t bpp = CGImageGetBitsPerPixel(image);
        size_t bpc = CGImageGetBitsPerComponent(image);
        size_t bytes_per_pixel = bpp / bpc;

        NSLog(@"%li %li", bpr/bytes_per_pixel, width);

        CGImageRelease(image);

    }
    return 0;
}

每行的字节数(也称为“步幅”)可以大于图像的宽度。每行末尾的额外字节将被简单地忽略。像素的字节数(x, y)从偏移量开始y * bytesPerRow + x * bytesPerPixel.

请注意,1376 可以被 32(以及所有较小的 2 的幂)整除,而 1366 则不能。现代 Mac 中的 CPU 具有一次运行 16 或 32 或 64 字节的指令,因此CGImage如果图像的步长是 16、32 或 64 的倍数,算法会更有效。CGDisplayCreateImage是由了解这一点的人写的。 (同样适用于CGBitmapContextCreate / CGContext.init如果你传递 0bytesPerRow.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CGImageRef 宽度与每行字节数不一致 的相关文章

随机推荐

  • CS5001 程序不包含适合入口点的静态“Main”方法

    我是 C 新手 如果有人可以告诉我为什么代码显示以下错误 我将不胜感激 CS5001 程序不包含适合入口点的静态 Main 方法 using System class test void Foo int x Console WriteLin
  • VBA:循环遍历行,如果满足条件则对某些行求和

    我在学习 VBA 的同时已经使用论坛几个星期了 但现在我陷入困境 需要帮助 所以这是我的问题 我有一本工作簿 里面有几个工作表 为简单起见 我们假设我有两个工作表 一份包含大量原始数据材料 另一份格式精美 将作为接收表 原始数据表如下所示
  • 我可以将 javascript 模块与“常规”javascript 混合使用吗?

    我有一个页面设置 它引用了几个 javascript 文件 并在页面中内联了一些 javascript 这是在加载页面时生成的 其中一个 JavaScript 文件包含来自第三方库的类 另一个 javascript 文件包含与页面相关的各种
  • Go 中的接口是如何表示的?

    我现在正在阅读两篇文章 有点困惑 本文 http blog golang org laws of reflection says gt var r io Reader tty err os OpenFile dev tty os O RDW
  • C# 4.0 可选 out/ref 参数

    C 4 0 是否允许可选out or ref论据 No 解决方法是使用另一种方法重载doesn t有 out ref 参数 并且它只调用您当前的方法 public bool SomeMethod out string input new o
  • 在视图中滚动时,recyclerView 不会调用 onBindViewHolder

    这是注意到的 启动时 数据项索引 0 1 5 将显示在视图中 并看到 onCreateViewHolder 和 onBindViewHolder 被调用 然后滚动出顶部项目 看到 onCreateViewHolder 和 onBindVie
  • 通过VBA解析Json数组

    我从 api 获取 json 响应并解析它以在 Excel 中更新 下面是代码 我无法进一步解析以获取价格信息 Dim strResult As String Dim objHTTP As Object Dim URL As String
  • Youtube-API:上传二进制字幕文件 (ebu-stl)

    YouTube 支持一些二进制字幕文件格式 例如 ebu stl 我有一个 stl 文件 当我通过 Web 界面上传它时 它可以正常上传和处理 但是 当我尝试使用 POST 请求通过 API v2 上传它时 它似乎无法正确识别文件格式 PO
  • $.mobile 未定义(Worklight + jQuery Mobile)

    我有主要的html
  • IScroll 包装器没有获得高度

    我有以下代码 div height 100 div class homebutton zeile a href pictures div class homebutton all div class homebutton name Pict
  • 我如何使用 python 从 flashscore 中抓取足球结果

    网页抓取 Python 我是刮擦新手 我想抓取英超联赛 2018 19 赛季结果 赛程 结果 日期 但我很难浏览该网站 我得到的只是空列表 无 如果您有可以分享的解决方案 这将是一个很大的帮助 这就是我尝试过的 import pandas
  • Angular 2:向 ngModelGroup 添加验证器

    我正在使用一个ngModelGroup将多个表单输入分组在一起的指令 在文档中 https angular io docs ts latest api forms index NgModelGroup directive html 我读到有
  • Promise.resolve 与解决

    我有这个代码 var promise1 new Promise function resolve reject setTimeout gt console warn Elo resolve First response 1000 promi
  • 我可以通过主机名从 Kubernetes 中另一个节点上运行的另一个容器访问该容器吗?

    我相信我的问题很简单 我正在执行在裸机上安装 Kubernetes 集群的先决条件 假设我有 master Docker DB 容器的主机名固定在第一个节点上 slave Docker DB 容器的主机名固定在第二个节点上 我可以与mast
  • CArrayDataProvider 与 CGridView 分页 Yii

    我正在尝试对 a 进行分页CGridView using CArrayDataProvider my rawData是一个自定义数组 不是来自数据库 模型 因此 在控制器的操作中有以下内容 form new SearchUser here
  • EF Code First 中的计算列

    我需要在数据库中有一列由数据库计算为 行总和 行总和b 我正在使用代码优先模型来创建数据库 我的意思是 public class Income Key public int UserID get set public double inSu
  • 将非对称算法私钥和公钥与 RSA C# 一起使用

    我有两个包含 RSA 私钥和 RSA 公钥的 AsymmetryAlgorithm 对象 私钥是从 Windows MY 密钥库中检索的 公钥是从用户的证书中检索的 如何在 C 中将这些密钥与 RSACryptoServiceProvide
  • 画布内元素中的事件

    我在画布标签内绘制了图像 我如何向其中添加事件 我想在用户单击该图像时执行某些操作 character addEventListener click function alert foo true character is a var im
  • Android 日历提供程序 API 级别

    我们正在开发一个 Android 日历应用程序 问题是我们想要获取其他日历的事件并将我们的事件也分享给他们 据我所知 这是由内容提供商实现的 问题是日历内容提供程序所需的API级别是API 14 我们需要在API 7 Android 2 1
  • CGImageRef 宽度与每行字节数不一致

    我正在尝试从屏幕缓冲区中读取像素 我正在创建一个CGImageRef with CGDisplayCreateImage 但值CGImageGetWidth and CGImageGetBytesPerRow在一起没有意义 将每行字节数除以