问题标签 [cgbitmapcontextcreate]

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 投票
0 回答
142 浏览

ios - Alpha 图像转换为 .mov

通过遵循堆栈上的各种教程,我已经能够创建正在播放的 .mov 。

但是,我的图像包含 alpha。

这产生

在此处输入图像描述

我有一种感觉,这是由于bitmapInfo,但是当我使用kCGImageAlphaLast我的应用程序崩溃时

这个错误

CGBitmapContextCreate:不支持的参数组合:8个整数位/分量;32 位/像素;三分量色彩空间;kCGImageAlphaLast; 688 字节/行。

我希望有一个简单的解决方案,我不确定我错过了什么。

这是我完整的pixelBufferCode

0 投票
1 回答
289 浏览

ios - iOS:在方法调用中使用 CGBitmapContextCreate 没有得到正确的结果

几个小时以来,我一直在为此挠头。

我正在使用以下方法调整 2 张图像的大小。相继:

它工作正常,没问题 - 但只有一张图像。如果我再次调用此方法,例如:

其中图像大小由:image1.size和决定image2.size。我试过翻转方法的调用顺序,第一个总是正确的。

它们不是太大,400 x 300、300 x 360。我只想将一个调整为 200 x 200,另一个调整为 150 x 150。这些只是 png。

它有效,但是如果我再次调用此方法,则第二张图像是错误的。错误的是它像纸上的水渍一样弄乱了像素。有时它甚至变得无法辨认。

我在这里遗漏了一些非常明显的东西吗?我试过了free(bytes);,我认为这里不需要,但为了尝试,但它仍然没有带来任何东西。我是否没有正确释放/释放某些东西,以便第二次调用该方法时,旧字节数据仍然存在?我只是在这里猜测。我正在使用 ARC。

0 投票
3 回答
899 浏览

ios - 为什么 CGBitmapContextCreateImage 比 [UIImage initWithData:] 慢?

我目前正在开发一个应用程序,它一个接一个地显示许多图像。不幸的是,我没有为此使用视频的奢侈,但是,我可以选择使用的图像编解码器。数据从服务器发送到应用程序,已经编码。

例如,如果我使用 PNG 或 JPEG,我可以使用[[UIImage alloc] initWithData:some_data]. 当我使用原始字节数组或另一个必须首先解码为原始字节数组的自定义编解码器时,我必须创建一个位图上下文,然后使用CGBitmapContextCreateImage(bitmapContext)它提供一个 CGImageRef,然后将其馈入[[UIImage alloc] initWithImage:cg_image]. 这要慢得多。

图像转换时间

上图(时间以秒为单位)是执行从 NSData 到 UIImage 的转换所需的时间。PNG、JPEG、BMP 和 GIF 都大致相同。Null 根本不打扰转换并返回 nil 。Raw 是使用位图上下文方法转换的原始 RGBA 字节数组。自定义的解压缩为原始格式,然后执行相同的操作。LZ4 是原始数据,使用 LZ4 算法压缩,因此它也通过位图上下文方法运行。

例如,PNG 图像只是经过压缩的位图图像。这种解压缩然后渲染比我渲染原始图像所花费的时间更少。iOS 必须在幕后做一些事情来加快速度。

如果我们查看转换每种类型需要多长时间以及绘制(到图形上下文)需要多长时间的图表,我们会得到以下信息:

绘图和转换时间

我们可以看到大多数图像的转换时间非常不同,但绘制时间却非常相似。这排除了 UIImage 懒惰并仅在需要时转换的任何性能提升。

我的问题本质上是:我可以利用众所周知的编解码器的更快速度吗?或者,如果没有,是否有另一种方法可以更快地呈现我的原始数据?

编辑:为了记录,每当我得到一个新的 UIImage 时,我都会在另一个 UIImage 上绘制这些图像。可能有一种我愿意研究的更快的替代方案。但是,不幸的是,OpenGL 不是一种选择。

进一步编辑:这个问题相当重要,我想要最好的答案。在确保给出最佳答案的时间到期之前,不会颁发赏金。

最终编辑:我的问题是为什么解压缩和绘制原始 RGBA 数组比绘制 PNG 更快,例如,因为 PNG 必须解压缩为 RGBA 数组然后绘制。结果是它实际上更快。但是,这似乎只在发布版本中出现。调试版本没有为此优化,但在幕后运行的 UIImage 代码显然是优化的。通过编译为发布版本,RGBA 阵列图像比其他编解码器快得多。

0 投票
1 回答
324 浏览

ios - CGBitmapContextCreate 在 iPhone 6+ 中提供 EXC_BAD_ACCESS

当调用 CGBitmapContextCreate 方法时,应用程序崩溃并给出 EXC_BAD_ACCESS。

这只发生在 iPhone 6+ 中(在设备上运行时)。

是的,我尝试将 NSZombieEnabled 设置为 YES 作为环境变量。但在 EXC_BAD_ACCESS 上调试器控制台上仍然没有显示任何内容。

0 投票
1 回答
1562 浏览

ios - 将图像转换为 16 位彩色图像

我正在寻找一种方法来优化我的图像,将其颜色从 32 位转换为 16 位,而不仅仅是调整它的大小。所以这就是我正在做的事情:

这段代码的问题是,当我运行它时,我得到了这个错误:

CGBitmapContextCreate:不支持的参数组合:5个整数位/分量;16 位/像素;三分量色彩空间;kCGImageAlphaNone; 10392 字节/行。

所以我的问题是:支持的组合是CGBitmapContextCreate什么?bitmapInfo在这种情况下我应该为参数选择什么?请建议。

0 投票
1 回答
101 浏览

ios - 由 CGContextDrawImage 未压缩的 png 与 xcode 中的 orign png 图像不同

我有一个颜色为白色的 png 图像,但 alpha 通道不同。即图像的一个像素由 (255, 255, 255, x) 组成,x 属于 [0~255]。

我用下面的代码把它读入menory,发现颜色值变成了和alpha值一样的。也就是pixel变成了(x, x, x, x);

使用 lldb 内存的值是:(lldb) expr spriteData (GLubyte *) $5 = 0x17bf7600 "\351\351\351\351\342\342\342\342\331\331\331\331\320\320\320\320\306\306\306ƽ\xbd\xbd\xbd\xb5\xb5\xb5\xb5\xae\xae\xae\xae\xa9\xa9\xa9\xa9\xa7\xa7\xa7\xa7\xa7\xa7\xa7\xa7\xa9\xa9\xa9\xa9\xae\xae\xae\xae\xb5\xb5\xb5\xb5\xbd\xbd\xbd\xbd\306\306\306\306\320\320\320\320\331\331\331\331\342\342\342\342\351\351\351\351\343\343\343\343\331\331\331\331\316\316\316\316\303\303\303\303\xb7\xb7\xb7\xb7\xac\xac\xac\xac\xa2\xa2\xa2\xa2\x9a\x9a\x9a\x9a\x94\x94\x94\x94\x91\x91\x91\x91\x91\x91\x91\x91\x94\x94\x94\x94\x9a\x9a\x9a\x9a\xa2\xa2\xa2\xa2\xac\xac\xac\xac\xb7\xb7\xb7\xb7\303\303\303\303\316\316\316\316\331\331\331\331\343\343\343\343\334\334\334\334\320\320\320\320\303\303\303\303\xb5\xb5\xb5\xb5\xa7\xa7\xa7\xa7\x9a\x9a\x9a\x9a\x8f\x8f\x8f\x8f\x86\x86\x86\x86\x7f\x7f\x7f\x7f{{{{{{{{\x7f\x7f\x7f\x7f\x86\x86\x86\x86\x8f\x8f\x8f\x8f\x9a\x9a\x9a\x9a\xa7\xa7\xa7\xa7\xb5\xb5\xb5\xb5\303\303\303\303\320\320\320\320\334\334\334\334\324\324\324\324\306\306\306\306\xb7\xb7\xb7\xb7\xa7\xa7\xa7\xa7\x98\x98\x98\x98\x89\x89\x89\x89||||qqqqjjjjffffffffjjjjqqqq||||\x89\x89\x89\x89\x98\x98\x98\x98\xa7\xa7\xa7\xa7\xb7\xb7\xb7\xb7\306\306\306\306\324\324\324\324\315\315\315\315\xbd\xbd\xbd\xbd\xac\xac\xac\xac\x9a\x9a\x9a\x9a\x89\x89\x89\x89xxxxjjjj^^^^VVVVRRRRRRRRVVVV^^^^jjjjxxxx\x89\x89\x89\x89\x9a\x9a\x9a\x9a\xac\xac\xac\xac\xbd\xbd\xbd\xbd\315\315\315\315\306\306\306\306\xb4\xb4\xb4\xb4\xa2\xa2\xa2\xa2\x8e\x8e\x8e\x8e{{{{jjjjZZZZNNNNEEEEAAAAAAAAEEEENNNNZZZZjjjj{{{{\x8e\x8e\x8e\x8e\xa2\xa2\xa2\xa2\xb4\xb4\xb4\xb4\306\306\306\306\300\300\300\300\xad\xad\xad\xad\x99\x99\x99\x99\x84\x84\x84\x84pppp]]]]MMMM@@@@7777333333337777@@@@MMMM]]]]pppp\x84\x84\x84\x84\x99\x99\x99\x99\xad\xad\xad\xad\300\300\300\300\xbc\xbc\xbc\xbc\xa8\xa8\xa8\xa8\x92\x92\x92\x92}}}}ggggTTTTCCCC6666----((((((((----6666CCCCTTTTgggg}}}}\x92\x92\x92\x92\xa8\xa8\xa8\xa8\xbc\xbc\xbc\xbc\xb9\xb9\xb9\xb9\xa4\xa4\xa4\xa4\x8e\x8e\x8e\x8exxxxbbbbOOOO====0000''''\"\"\"\"\"\"\"\"''''0000====OOOObbbbxxxx\x8e\x8e\x8e\x8e\xa4\xa4\xa4\xa4\xb9\xb9\xb9\xb9\xb8\xb8\xb8\xb8\xa3\xa3\xa3\xa3\x8d\x8d\x8d\x8dvvvv````MMMM;;;;....$$$$ $$$$....;;;;MMMM````vvvv\x8d\x8d\x8d\x8d\xa3\xa3\xa3\xa3\xb8\xb8\xb8\xb8\xb9\xb9\xb9\xb9\xa4\xa4\xa4\xa4\x8e\x8e\x8e\x8exxxxbbbbOOOO====0000''''\"\"\"\"\"\"\"\"''''0000====OOOObbbbxxxx\x8e\x8e\x8e\x8e\xa4\xa4\xa4\xa4\xb9\xb9\xb9\xb9\xbc\xbc\xbc\xbc\xa8\xa8\xa8\xa8\x92\x92\x92\x92}}}}ggggTTTTCCCC6666----((((((((----6666CCCCTTTTgggg}}}}\x92\x92\x92\x92\xa8\xa8\xa8\xa8\xbc\xbc\xbc\xbc\300\300\300\300\xad\xad\xad\xad\x99\x99\x99\x99\x84\x84\x84\x84pppp]]]]MMMM@@@@7777333333337777@@@@MMMM]]]]pppp..."

我需要opengl渲染的真实颜色,但它已经改变了。你能告诉我如何修复它。

这是我的演示代码,你可以使用 xcode 直接构建运行它。 代码下载

0 投票
1 回答
553 浏览

macos - 在 Swift/Cocoa 中从 TrueType 字体生成图像

我正在尝试在 Cocoa(不是 UIKit)中使用 Swift 从 ttf 字体生成 NSImage,目前我正在努力创建上下文。

我的基本代码来自这个项目:https ://github.com/reeonce/Ionicons.swift 但它是为 UIKit 设计的,所以我尝试为 Cocoa 翻译它。

这是原始代码:

这是我目前所拥有的:

这给了我一个运行时错误,因为我不知道如何初始化上下文:

对初学者有什么提示吗?谢谢

0 投票
1 回答
4394 浏览

ios - Swift 2&3:如何使用 CGBitmapContextCreate

我有以下代码:

问题是我收到此错误:

表达式不符合类型“NilLieralConvertible”

对于第一个参数,我应该传递什么而不是 nil,为什么?

0 投票
1 回答
518 浏览

ios - CGContextDrawImage错误,如何分配缓冲区?

我正在尝试将图像数据存储在我的应用程序的缓冲区中,因此我将能够使用它,但是我在 CGContextDrawImage 行上收到 EXC_BAD_ACCESS 错误。这是我正在使用的代码:

当尝试将缓冲区和字节设置为 null 和 0 时,如用于自动内存分配的苹果文档中的应用程序不会崩溃,但会出现以下错误:

好像我错过了一些东西,但无法真正弄清楚,需要任何建议,谢谢!

0 投票
0 回答
176 浏览

xamarin - 使用 CGBitmapContext 生成错误的图像

我有这个代码

我只是从原始图像中获取字节数组并使用 CGBitmapContext 创建图像,但结果是:

在此处输入图像描述

在此处输入图像描述