问题标签 [nsbitmapimagerep]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1889 浏览

cocoa - 为什么 bitmapImageRepForCachingDisplayInRect: 创建一个空图像?

我有一段非常简单的代码,应该可以捕获视图的位图。这曾经在 Leopard 中有效,但在 Snow Leopard 中似乎非常糟糕。

这是代码,响应窗口上的按钮按下:

单击按钮拍摄快照只会产生完全透明的图像。

我在这里完全一无所知,还是这个位图缓存方法坏了?

一个简单的项目——基本上是一个启动 NSDocument 项目,带有一个调用此代码的按钮——可以在这里找到。

0 投票
1 回答
2842 浏览

cocoa - 如何用 Cocoa 压缩 jpeg 图像?

我有一个 jpeg 图像,我希望能够使用 Cocoa/Core Image/Core Graphics 逐步压缩它。比如我有A.jpg(3MB),我压缩A得到B.jpg(1MB),压缩B得到C.jpg(400KB),以此类推,直到图像无法再压缩。

我正在尝试使用 NSBitmapImageRep representationUsingType:properties 但没有取得多大成功。我使用从压缩图像数据创建的图像代表来尝试进一步压缩,但是如果我使用与用于创建初始压缩数据的压缩因子相同的压缩因子,则效果不佳。

这是我一直在争论的代码

这是我的结果

0 投票
2 回答
1036 浏览

objective-c - 将 NSImageView 中单击的 NSPoint 转换为更正底层 NSBitmapImageRep 中的像素坐标

这是我想要完成的事情:我正在开发一个开源 TI 计算器模拟器,我目前正在尝试添加皮肤支持。皮肤图像只是一个 NSImageView,其图像设置为皮肤图像。我重写 mouseDown: 方法并使用 convertPointFromBase: 以 locationInWindow 返回值作为转换点来获取鼠标在 NSImageView 坐标中的位置。

然后,我使用 bestRepresentationForDevice: 从 NSImageView 获取底层 NSBitmapImageRep,并带有一个 nil 参数。最后,我在 NSBitmapImageRep 上调用 getPixel:atX:y 并使用 point.x 和 point.y 作为位置。

但是,NSImageView 的原点从左下角开始(像往常一样),而 NSBitmapImageRep 的坐标从左上角开始。我似乎找不到一种明显的方法来弥补这一点,因此按钮点击的命中测试无法正常工作。任何帮助是极大的赞赏。

0 投票
5 回答
2785 浏览

cocoa - 如何从 NSBitmapImageRep 创建具有透明度的 8 位 PNG?

我有一个 32 位NSBitmapImageRep,它有一个 alpha 通道,基本上是 1 位值(像素是打开还是关闭)。

我想将此位图保存为具有透明度的 8 位 PNG 文件。如果我使用 and 的-representationUsingType:properties:方法NSBitmapImageRep传入NSPNGFileType,会创建一个 32 位的 PNG,这不是我想要的。

我知道可以读取 8 位 PNG,它们在预览中打开没有问题,但是是否可以使用任何内置的 Mac OS X API 编写这种类型的 PNG 文件?如有必要,我很乐意使用 Core Image 甚至 QuickTime。对文档的粗略检查CGImage并没有发现任何明显的东西。

编辑: 我已经开始对这个问题进行赏金,如果有人可以提供工作源代码,它采用 32 位NSBitmapImageRep并编写具有 1 位透明度的 256 色 PNG,它就是你的。

0 投票
1 回答
978 浏览

objective-c - 将 NSBitmapImageRep 保存为 NSBMPFileType 文件。错误的 BMP 标头和位图内容

我将 NSBitmapImageRep 保存到 BMP 文件(雪豹)。当我在macos上打开它时似乎没问题。但它在我的多媒体设备上出错(可以显示来自互联网的任何 BMP 文件)。我不知道出了什么问题,但是当我查看文件内部时(在 macos 上使用很酷的 hexfiend 应用程序),有两件事错了:

  • 标头的 biHeight 参数值错误:4294966216 (hex=C8FBFFFF) 标头具有正确的 biWidth 参数:1920
  • 位图内容中的第一个像素(在 BMP 格式的 54 字节标头之后)对应于原始图像的左上角。在原始 BMP 文件中,按照 BMP 格式的规定,它应该首先是左下角像素。

为了解释我的应用程序中的完整工作流程,我有一个 NSImageView,我可以在其中拖动 BMP 图像。这个视图绑定到一个 NSImage。拖放后,我有一个操作可以将此图像(上面绘制一些文本)保存到 BMP 文件中。

这是保存新 BMP 文件的代码:

duneScreenViewdrawSynopsisContentWithDuneFolder 方法使用 CGContextDrawImage 来绘制图像。duneScreenViewdrawSynopsis 方法使用 CoreText 在同一上下文中绘制一些文本。

你知道出了什么问题吗?

0 投票
1 回答
1846 浏览

cocoa - 进入 NSImage 的像素数据

我正在编写对黑白图像进行操作的应用程序。我通过将 NSImage 对象传递到我的方法中,然后从 NSImage 生成 NSBitmapImageRep 来做到这一点。一切正常,但速度很慢。这是我的代码:

所以我尝试使用 CIImage 但我不知道如何通过 (x,y) 坐标进入每个像素。这真的很重要。

0 投票
1 回答
858 浏览

objective-c - 将内存中的PNG无损压缩为NSData?

我目前有一个包含有效 PNG 数据的 NSData:
NSData* imageData = [bitmapRep representationUsingType:NSPNGFileType properties:nil];

我已将此数据写入一个文件:
[imageData writeToFile:@"test.png" atomically:YES];
使用 OptiPNG 或 PNGCrush 对其进行压缩会产生有希望的结果(25%+ 压缩)。

我想在内存中执行此任务,向 NSData 添加一个类别以启用类似:
[imageData optimizePNGData]

然而,文件系统调用深深地嵌入到 OptiPNG 和 PNGCrush 中,使得它们都不适合构建为库(例如 optipng.a)。

有没有人知道如何在不依赖 exec 调用的情况下完成类似的事情,就像大多数 GUI 包装器所做的那样?

0 投票
1 回答
833 浏览

objective-c - 将 1.8 的 Gamma 应用于 NSImage

我正在尝试将 NSImage 转换为 1.8 的伽玛值,但我运气不佳。我找到了一些代码,但没有任何工作。我有一个返回 NSImage 类别的 NSBitmapImageRep 的方法。

首先,我尝试使用我在网上找到的 CGColorSpaceCreateCalibratedRGB 函数更改色彩空间,但这没有效果:

接下来我尝试在位图图像属性上设置伽玛:

这设置了属性,但对输出图像没有影响。

有没有办法做到这一点?

0 投票
1 回答
1926 浏览

opengl - 使用 NSBitmapImageRep 创建带有 alpha 的 OpenGL 纹理

我正在使用以下方法加载 PNG:

我可以从中成功创建 gl 纹理并正确渲染而没有任何透明度。但是,当我打开混合使用时:

纹理以正确的透明背景渲染,但图像颜色不正确。

我在混合功能中尝试了几个选项,GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE,GL_DST_ALPHA等。

我被教导也许我需要重新排序图像数据中的位,也许通道已经混合了,但我不希望在这种情况下混合关闭时它能够正确渲染。

或者,我想我可以使用 libPNG,但如果可能的话,我想尝试使用 a NSBitmapImageRep

0 投票
1 回答
419 浏览

windows - NSBitmapImageRep 生成的 BMP 在 Windows 上无法读取

我有一个 NSBitmapImageRep 我正在创建以下方式:

并以这种方式保存为 BMP:

这里的问题是 BMP 文件可以在 Mac OSX 下正确读取和操作,但在 Windows 下,它只是无法加载,就像在这个屏幕截图中一样:

截图 http://dl.dropbox.com/u/1661304/Grab/74a6dadb770654213cdd9290f0131880.png

如果文件是用 MS Paint 打开的(是的,MS Paint 可以打开它)然后重新保存,它会起作用。

在这里很感激。:)

提前致谢。