问题标签 [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 回答
998 浏览

swift - Swift - OSX - 调整 NSImage 数据的大小

我正在尝试调整 NSImage 的大小以将其与 parse 作为 PFFile 一起使用,并且我需要更改其尺寸以减小其数据大小,但它不起作用。调整大小的图像在 Swift 中调整了宽度和高度,但它与原始图像保持相同的尺寸。

该图像是 2560 x 1706 和 721 KB 的 JPG。

当我将它传递给数据时,它保持相同的尺寸并达到 5.7 MB

这是我的代码:

调整图像大小的方法:

我已经尝试了以下方法但没有成功。

1 - 直接在 fotoNSImagePng 上更改 pixelWide 和 pixelHigh:

2 - 创建一个新的 NSBitmapImageRep 并用它替换图像表示:

3 - 遵循这种方法: 如何调整大小 - 重新采样 - 更改文件大小 - NSImage

4 - 更改 NSBitmapImageRep 大小值:

到目前为止没有任何效果。

0 投票
1 回答
462 浏览

swift - 将 NSImageView 以 png/jpg 格式保存到磁盘

我正在尝试从(所有子视图)的内容创建图像NSImageView并将其保存到 Mac 上的磁盘。现在将其写入磁盘的步骤失败了。当我在调试器中逐步执行代码时,我注意到它imageData似乎没有正确创建。当我更深入地查看该字段时,变量视图会显示imageData's 值。somebacking.bytesnil

在此处输入图像描述

我的猜测是这一行:

失败了。这是我正在使用的完整代码:

任何想法为什么这会失败?谢谢。

0 投票
1 回答
291 浏览

multithreading - 如何防止 NSBitmapImageRep 创建大量中间 CGImages?

我有一个生成艺术应用程序,它从一小组点开始,向外扩展它们,并检查增长以确保它不会与任何东西相交。我的第一个天真的实现是在主 UI 线程上完成这一切,并产生预期的结果。随着尺寸的增长,需要检查的点越来越多,它会变慢并最终阻塞 UI。

我做了一件显而易见的事情,并将计算转移到另一个线程,以便 UI 可以保持响应。这有帮助,但只有一点点。我通过一个NSBitmapImageRep包裹来实现这一点,NSGraphicsContext这样我就可以画进去了。但我需要确保我不会尝试在主 UI 线程上将其绘制到屏幕上,同时我也在后台线程上绘制到它。所以我介绍了一把锁。随着数据变大,绘图也可能需要很长时间,所以即使这样也是有问题的。

我的最新版本有 2NSBitmapImageRep秒。一个持有最近绘制的版本,并在视图需要更新时被绘制到屏幕上。另一个在后台线程上绘制。当后台线程上的绘图完成后,它被复制到另一个线程。我通过获取每个的基地址并简单地调用memcpy()将像素从一个实际移动到另一个来进行复制。(我尝试交换它们而不是复制它们,但即使绘图以对 的调用结束[-NSGraphicsContext flushContext],我仍将部分绘制的结果绘制到窗口。)

计算线程如下所示:

这足以保持 UI 响应。但是,每次我将绘制的图像复制到 blitting 图像中时,我都会调用[-NSBitmapImageRep baseAddress]. 查看仪器中的内存配置文件,每次调用该函数都会导致CGImage创建一个。此外,CGImage在计算完成之前不会发布,这可能需要几分钟。这会导致内存变得非常大。我在我的过程中看到了大约 3-4 Gigs 的 CGImages,尽管我从不需要超过 2 个。计算完成并清空缓存后,我的应用程序的内存下降到只有 350-500 MB。我没有想过为此在计算循环中使用自动释放池,但会试一试。

操作系统似乎正在缓存它创建的图像。但是,在计算完成之前它不会清除缓存,因此在此之前它会无限增长。有什么办法可以防止这种情况发生吗?

0 投票
0 回答
40 浏览

nstextview - NSTextView -> cacheDisplay 丢失了一些下划线,但没有其他下划线

在我的应用程序中,我遇到了一个奇怪的下划线问题。我没有任何其他与字体相关的属性(大小、样式、粗体等)的问题,只有下划线。

我在 NSTextView,theView 中有文本数据。下划线在文本中的任何地方都是正确的。

我使用这样的代码:

然后我使用该位图缓冲区为 OpenGL 创建一些纹理(我知道,我应该使用 Metal,我很快就会使用)并将它们渲染到另一个窗口。并非所有下划线都可见。文件开头的那些丢失了。文件末尾的那些是正确的。

文本可能很长,超过 5000 行。如果我从文件中间删除一大块文本,文件开头的下划线会在 OpenGL 视图中正确显示。这就是我在操作之前克隆 NSTextView 的原因,否则它需要很长时间,以至于它会干扰用户在窗口中编辑 NSTextView。

我已经一一浏览了属性,并且每次它们都是相同的,无论是在文件的开头和结尾,还是在我的 OpenGL 窗口中下划线可见和不可见的情况下。

正如我上面所说,所有其他文本属性始终是正确的。

文本的来源要么是一个 RTF 文件,要么是从另一个应用程序粘贴进来的,要么是直接输入到 NSTextView 中的。无论来源如何,行为都是相同的。

0 投票
1 回答
375 浏览

objective-c - 将 NSBitmapImageRep 转换为 NSImage

我在NSImageand之间切换NSBitmapImageRep(因为只NSBitmapImageRep允许我查找-替换每个像素的颜色,但只有sNSImage可以在NSImageView/中使用)。我知道如何将 a 转换为(使用),但我不能做相反的事情,因为它是只读的。那么,如何将 a 转换为 a ?NSImageCellsetImageNSImageNSBitmapImageRepbitmap = [NSBitmapImageRep imageRepWithData:[image TIFFRepresentation]]TIFFRepresentationNSBitmapRepNSImage

带着希望,

拉佐73

0 投票
1 回答
44 浏览

swift - NSBitmapImageRep 上的 setColor 在 Swift 中不起作用

我试图弄清楚 setColor 是如何工作的。我有以下代码:

代码的目的是将照片(彩虹)更改为全黑(我现在只是用黑色进行测试,以确保我理解它是如何工作的)。但是,当我运行程序时,显示的是彩虹不变的图片,而不是黑色照片。

我收到这些错误: Unrecognized colorspace number -1Unknown number of components for colorspace model -1.

谢谢。