在两个轴上翻转 NSImage

2023-11-22

我正在尝试翻转使用 NSImageBitmapRep 表示创建的 NSImage。经过一番挖掘(翻转 Quicktime 预览和捕获 and 镜像 CIImage/NSImage)我通过 CIImage 尝试了两种方法,并对这两个因素应用 -1 的缩放变换。

首先使用 CIImage imageByApplyingTransform:

    NSBitmapImageRep *imgRep = ...
    CGImageRef cgi = [imgRep CGImage];
    CIImage *cii = [CIImage imageWithCGImage:cgi];
    CGAffineTransform at = CGAffineTransformTranslate(CGAffineTransformMakeScale(-1, -1), 0, 0);
    NSCIImageRep *ciiRep = [NSCIImageRep imageRepWithCIImage:[cii imageByApplyingTransform:at]];

    NSImage *img = [[[NSImage alloc] init] autorelease];
    [img addRepresentation:ciiRep];
    [self.ivImage setImage:img];

然后使用 CIAffineTransform 过滤器:

    NSBitmapImageRep *imgRep = ...
    CGImageRef cgi = [imgRep CGImage];
    CIImage *cii = [CIImage imageWithCGImage:cgi];
    CIFilter *f = [CIFilter filterWithName:@"CIAffineTransform"];
    NSAffineTransform *t = [NSAffineTransform transform];
    [t scaleXBy:1.0 yBy:1.0];
    //[t translateXBy:width yBy:0];
    [f setValue:t forKey:@"inputTransform"];
    [f setValue:cii forKey:@"inputImage"];
    CIImage *cii2 = [f valueForKey:@"outputImage"];
    NSCIImageRep *ciiRep = [NSCIImageRep imageRepWithCIImage:cii2];

    NSImage *img = [[[NSImage alloc] init] autorelease];
    [img addRepresentation:ciiRep];
    [self.ivImage setImage:img];

两种方式都会产生空白图像。我还尝试翻译图像,以防由于 -1 缩放而超出屏幕,但无济于事。如果我使用正值进行缩放,我可以看到转换已正确应用。

self.ivImage 是一个 NSImageView。我想要一个翻转的实际 NSImage,因此不能选择对 NSImageView 应用转换。

这是 32 位,Lion 上的 Xcode 4.3.2。


你应该初始化你的NSImage有尺寸。

用翻译来展示你的尝试,因为这是正确的方法。通常,最简单的方法是先进行平移,然后再进行缩放。您的代码片段似乎有尝试翻译的残留痕迹,但它们是不正确的。在一种情况下平移 0,0,在另一种情况下平移 width,0。另外,在第二个代码片段中,您按 1,1(正)缩放,因此不会翻转。

此外,简单地将焦点锁定在适当大小的新图像上、设置变换并绘制图像代表可能会更简单。避免所有这些事情CIImage.

NSBitmapImageRep *imgRep = ...
NSImage* img = [[[NSImage alloc] initWithSize:NSMakeSize(imgRep.pixelsWide, imgRep.pixelsHigh)] autorelease];
[img lockFocus];
NSAffineTransform* t = [NSAffineTransform transform];
[t translateXBy:imgRep.pixelsWide yBy:imgRep.pixelsHigh];
[t scaleXBy:-1 yBy:-1];
[t concat];
[imgRep drawInRect:NSMakeRect(0, 0, imgRep.pixelsWide, imgRep.pixelsHigh)];
[img unlockFocus];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个轴上翻转 NSImage 的相关文章

随机推荐

  • 为什么从 int 到 float 的转换会对值进行四舍五入?

    我正在阅读 CS APP 关于演员阵容 它说在演员阵容时从int到float 数字不能溢出 但可能会被四舍五入 这对我来说很奇怪 因为我不知道要舍入什么 所以我尝试了一下 我认为这只适用于非常大的整数 接近INT MAX INT MIN 但
  • 从 Excel 文档中的代码隐藏访问 ActiveX 或 Form 对象(文本框)

    Excel 文件中有几个作为 ActiveX 对象的文本框 我想从代码隐藏中访问它们 我正在将 ClosedXML 用于其他领域 但我愿意接受其他建议 要从 C 访问 OLE 对象 请添加对 Microsoft Forms 2 0 对象库的
  • Caliburn.Micro。使用 Autofac 自动为 IHandle 实现者调用 eventaggregator.Subscribe()

    In Caliburn Micro作者的文档提到了这种可能性 文档链接 IHandle继承自标记接口IHandle 这允许使用强制转换来确定对象实例是否订阅任何事件 如果您与 IoC 容器集成 这可以实现简单的自动订阅 大多数 IoC 容器
  • 使用javascript将base64字符串转换为图像

    正在使用 Titanium 开发一个应用程序 我需要将从 JSON 获取的 Base64 字符串转换为图像 我们将非常感谢您的帮助 你可以只创建一个img元素并改变它的src与所需的数据 img src
  • 测试单个数值向量的所有元素之间的相等性

    我正在尝试测试向量的所有元素是否彼此相等 我提出的解决方案似乎有些迂回 都涉及检查length x lt c 1 2 3 4 5 6 1 FALSE y lt rep 2 times 7 TRUE With unique length un
  • 如何将 Paytm 钱包集成到 Android 应用程序中? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想将 Paytm 钱包集成到 Android 应用程序中作为支付选项 就像在 Uber 应用程序中一样 谁能帮我吗 提前致谢 Update Paytm 现已添加文档 https
  • iPhone 喜欢 WPF 项目中的红色徽章通知吗?

    I have a C WPF project which generates daily and weekly reports automatically I want to inform the user when new reports
  • 达特朗等待不止一个未来

    我想在未来的很多功能完成后做一些事情 但我不知道dart中的代码如何编写 代码是这样的 for var d in data d loadData then when all loaded do something here 但我不想一一等待
  • Ajax POST 方法将字符串中的“+”值转换为“”,为什么?

    我不明白为什么在 ajax 中 号会转换为 请解释一下 Use the encodeURIComponent 函数将您的数据转换为请求的有效编码数据 xhr open POST url true xhr send encodeURIComp
  • 使用 jmap(1.5) 从 java 核心转储中提取信息

    长话短说 一些同事正在运行一个相当旧的设置 x86 64 中的 oc4j jdk1 5 6 其应用程序恰好是关键任务 他们最近尝试部署应用程序的新版本 但一旦他们这样做 java 进程就会抛出核心转储并死掉 问题是 核心转储似乎没问题 gd
  • MVC 与 Web 应用程序的实际模式是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 造成混乱的原因是网上流传着
  • div、px、dpi 之间的关系

    如果在布局 xml 文件中 我将大小设置为 例如 12dip mdpi 中总是 12px hdpi 中总是 18px 吗 那么 dip 对于 mdpi 是否总是正确 并且对于其他密度也会相应地缩放 这个问题完全由官方文档 div px 和
  • 如何在 D2 (Phobos) 中获得单次击键?

    是否有一种简单的跨平台方法可以使用 Phobos 在 D2 中进行单次击键 例如 按任意键继续 提示 或者 Brainfuck 解释器 我尝试过的所有方法都需要在传递输入之前按 Enter 键 例如 getchar 在 Windows 上使
  • 运行循环结束——自动释放池恢复

    据我了解 一旦自动释放池被释放 自动释放的对象就会被清理 现在 自动释放池将在运行循环结束时释放 我的问题是 如果在我的类中我没有创建自定义自动释放池并对该类中的某些对象调用自动释放方法 那么这些对象在什么时候会被恢复 运行循环结束 是否意
  • 奇怪的 GCC 短 int 转换警告

    我有一些 C 代码 其内容如下 short int fun16 void short int a 2 short int b 2 return a b 当我尝试用 GCC 编译它时 我收到警告 warning conversion to s
  • 如何使用 JavaScript 下载大文件

    我需要使用 JavaScript 下载一个大文件XMLHttp请求 or fetch无需先将文件保存在 RAM 内存中 正常的链接下载对我来说不起作用 因为我需要在请求的标头中发送不记名令牌 我可以设法下载一个文件 但是这个 解决方案 它首
  • 使用 phpexcel 填充下拉列表

    我遇到了以下问题 我试图从数据库中获取一些结果 并且想将结果插入到下拉列表中 example 文件中有以下示例 objValidation gt setFormula1 Item A Item B Item C 因此结果必须以逗号分隔 总结
  • Java:将控制台光标向上移动一行

    首先让我澄清一下 我是编程新手 希望我使用正确的术语 我使用的是System out print 打印到Windows控制台的方法 System out print Backspace b Output Backspace b所以如果我输入
  • 如何检查哪个图像链接到android中的ImageView?

    好吧 我的应用程序中有一个按钮和一个 ImageView 我想做的是 当我按下按钮时 ImageView 上的图像将会改变 我只有两张图片文件 我想做的是 如果第一张图片链接到 ImageView 则通过单击按钮将其更改为 pic2 如果链
  • 在两个轴上翻转 NSImage

    我正在尝试翻转使用 NSImageBitmapRep 表示创建的 NSImage 经过一番挖掘 翻转 Quicktime 预览和捕获 and 镜像 CIImage NSImage 我通过 CIImage 尝试了两种方法 并对这两个因素应用