问题标签 [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 投票
2 回答
4601 浏览

ios - CGBitmapContextCreate 返回 NULL

什么情况下CGBitmapContext会分配失败?我有一个表格视图,它有多个视图选项。用户可以看到一个只有预览的小表格单元格、每行一个较大的预览或每行两个并排的预览。前两个渲染得很好,但第三个失败了。CGBitmapContextCreate 没有错误消息,只是在我尝试使用它之后出现错误(即无效上下文 0x0)。

我的目标是 iOS 5.0,使用 5.1 构建。工作版和非工作版的唯一区别是非工作版尝试做两次(尺寸很小,小于 100x100)。 只有右边有这个问题(即第二次尝试)。第一次尝试仍然有效。

0 投票
2 回答
682 浏览

ios - Iphone Pixel RGBA值编辑

我的目标如下。

当玩家触摸屏幕时,程序应该找出触摸位置的像素值,然后循环遍历每个像素,任何具有完全相同 RGBA 值的像素都将被编辑,此时我只想设置alpha 为 0 以使它们全部不可见。

到目前为止,我已经设法检索信息,找出哪些对应于触摸的像素,但是当我设置像素并从新数据创建 UIImage 并设置它时。没有什么变化。

一点帮助将不胜感激。

代码如下

功能

(UIImage*)getRGBAsFromImage:(UIImage*)image atX:(int)xx andY:(int)yy

它是这样称呼的

0 投票
2 回答
2306 浏览

ios - CGImageCreate 提供完全黑色或无图像或崩溃

一段时间以来,我一直在尝试执行以下操作,

  • 玩家点击屏幕
  • 获取玩家点击的像素值
  • 循环遍历图像以找出哪些像素是相同的
  • 具有相同值的像素具有 0 的 alpha 创建一个新图像和
  • 将 UIImage 设置为新创建的
  • ...
  • 利润

但它似乎就像标题所说的那样,完全黑屏,或者没有任何图像......可能会将所有 alpha 设置为 0,或者它会在此函数 CGSConvertBGRX8888toRGBA8888 附近的堆栈上因错误访问而崩溃

这是功能

{

}

我相当确定我通过一些测试获得了正确的像素并将选择的颜色输出到该部分似乎工作正常的视图,这似乎是我在编辑原始数据后创建图像时,至少那是我认为问题在于。

提前为任何帮助欢呼。

编辑:

我现在已经剥离了代码,所以基本上它所做的只是将 png 复制到原始数据并从中创建一个 UIImage 并设置它,基本上我应该得到完全相同的图像并且什么都不应该改变。但是这一次它只是消失了,无论是从 0 值还是由于 alpha 为 0 我不确定编辑的代码如下

0 投票
2 回答
4679 浏览

iphone - “CGBitmapContextCreate:无效数据字节/行”......为什么相机+过滤会扰乱我的图像裁剪程序?

原始图像:在此处输入图像描述 过滤后的图像:在此处输入图像描述

我正在尝试将 UIImages(手机相机胶卷中的照片)裁剪成正方形。这是我正在使用的代码的一部分,其中“图像”是被裁剪的图像:

如果我使用的是原始图像,此时它看起来像这样:在此处输入图像描述

这很好,我所期望的 - 我有一个在这里没有显示的旋转算法来解决这个问题。

如果我使用过滤后的图像,它看起来像这样:在此处输入图像描述

...不是方形裁剪,而是奇怪地放大了。 所以这似乎是问题所在,我不知道为什么这些过滤后的图像表现不同。

我的问题是,在最后一行CGBitmapContextCreate,我有时会收到以下错误:

奇怪的是,这通常不会发生 - 到目前为止,我只在原始图像的高度大于宽度时遇到此错误,并且它已被另一个名为 Camera+ 的应用程序过滤...之前完全相同的照片过滤没有问题,过滤后的风景照片似乎也很好。

任何人都可以在这里指导我或帮助我解释实际发生的事情吗?我从错误消息中了解到,如果我将CGImageGetBytesPerRow(imageRef)替换为高于 7744 的任意数字,则该错误不再发生,但我对 CGImage 的内容了解得不够多,无法知道实际产生的影响任何东西,在我看来,这并不是一个实际的解决方案。此代码基于我在网上看到的其他裁剪示例,因此我对这些位图函数的理解有限。

任何想法将不胜感激!

编辑

我在 SO 上发现了这个问题:在这个 CGBitmapContextCreate 中,为什么 bytesPerRow 为 0?它提示我尝试将 bytesPerRow 参数设置为 0。事实证明这消除了错误,但我的裁剪例程在与之前发生此错误时相同的情况下无法正常工作。这可能需要一个特别的人来回答,但是有没有人对图像过滤有足够的了解来猜测为什么这个代码会以某种方式对面向肖像、相机+过滤的照片进行不同的处理?由于问题略有变化,我已经更新了标题。

编辑2

我在上面的代码中添加了示例图像,最后,在任何必要的旋转之后,最终裁剪的图像如下所示:

与原始图像:在此处输入图像描述- 完美!

过滤后的图像:在此处输入图像描述- 可怕!

用于创建这些最终的、被认为是裁剪图像的代码是这样的:

0 投票
1 回答
5177 浏览

cgbitmapcontextcreate - CGBitmapContextCreate unsupported parameter combination error

I'm reading an image file and re-displaying it without making any change as shown in the code below, but I get the this error:

: CGBitmapContextCreate: unsupported parameter combination: 8 integer bits/component; 16 bits/pixel; 1-component color space; kCGImageAlphaPremultipliedLast; 3792 bytes/row.

The code is:

This code used to work fine until I upgraded to Xcode 4.4 recently.

Following a suggestion in iPhone CGContextRef CGBitmapContextCreate unsupported parameter combination, I replaced "CGImageGetColorSpace(sourceImage)," by "CGColorSpaceCreateDeviceRGB(),", but got this error:

: CGBitmapContextCreate: invalid data bytes/row: should be at least 15168 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedLast.

Then, when I replaced "CGImageGetBytesPerRow(sourceImage)," by "CGImageGetBytesPerRow(sourceImage)*4," the errors were gone but for copies of the 4X reduced image were displayed side-by-side.

Has anybody encountered this problem? Is it related to the Xcode 4.4 upgrade?

Thanks! Shai

0 投票
1 回答
60 浏览

iphone - How to set an image to fill in full view?

i am using below code for fill rgba forful view. but i am getting half(1/2) width only. anybody please inform me anything wrong with my code.

0 投票
1 回答
1101 浏览

objective-c - CGBitmapContextGetData - can't copy data to the returned block of memory

I am drawing RGBA data onto the screen using CGBitmapContextCreate and CGContextDrawImage. When I try to create bitmapcontext using CGBitmapContextCreate(pixelBuffer,...) where I have alreadymalloc'ed pixelBuffer and placed my data there, this works just fine.

However, I would like Core Graphics to manage its own memory so I would like to pass NULL to CGBitmapContextCreate, and then get the pointer to the memory block used by calling CGBitmapContextGetData, and copying my RGBA buffer to the aforementioned block using memcpy. However, my memcpy fails. Please see my code below. Any idea what I am doing wrong?

0 投票
1 回答
4413 浏览

ios - 崩溃 CGDataProviderCreateWithCopyOfData:vm_copy 失败:状态 1

我正面临以下错误的崩溃:

“CGDataProviderCreateWithCopyOfData:vm_copy 失败:状态 1。”

我有多个问题,你可以帮忙。

  1. vm_copy failed 中的状态 1 代表什么?

  2. 仅当我在数据副本的内部 for 循环中设置断点时,才会发生此崩溃。然后恢复并删除断点。如果没有断点,函数会执行但我得到一个空白图像。如何确保即使我没有设置断点,也能捕获此类崩溃并且应用程序停止执行?

  3. 当我执行 CGBitmapContextCreateImage 时出现此错误。有谁知道如何解决这个问题?

0 投票
1 回答
2007 浏览

iphone - 将 CGImage 绘制到 Bitmap 上下文中,并预先将 UIBezierPath 绘制到上下文中

这是我的第一个问题,所以请多多包涵!

我基本上是在尝试写一个简单的绘图应用程序,我之前使用过Core Graphics,唯一的问题是它太慢了,当我用手指绘图时它会滞后,非常糟糕!

所以,现在我正在尝试使用 UIBezier 路径进行绘制,据我所知,它的速度要快得多,就是这样!

当我使用 Core Graphics 时,为了保持绘图速度,我正在绘制我创建的自定义位图上下文,该上下文在我绘制时不断更新。

因此,我绘制到我的自定义位图上下文,然后使用 - 将 CGImageRef 设置为在该上下文中绘制的内容 -

然后使用 - 将其拉回到位图上下文中 -

我也这样做了,所以当我改变所绘制线条的颜色时,绘图的其余部分保持之前绘制的状态,如果这有意义的话。

现在我遇到的问题是这个。

我试图绘制 UIBezier 路径到我的图像上下文使用 -

路径是我的 UIBezierPath。所有的路径设置都是在 touches 开始和 touched 移动然后调用 [self setNeedsDisplay] 中完成的;调用drawRect。

发生的事情是,当我绘制时,它要么没有正确地将 CGImageRef 绘制到上下文中,要么就是这样,但是当它捕获缓存图像时,它从某个地方捕获了一个白色背景,而不仅仅是路径,因此它粘贴在整个最后一条路径与白色背景填充一起绘制的图像,因此即使视图背景颜色为 clearColor,您也看不到为构建图像而绘制的最后一条路径。

我真的希望我说得通,我只是在这上面花了太多时间,这让我完全筋疲力尽。这是我正在使用的绘图方法 -

这将创建图像上下文 -

这是我的画——

'path' 是我的 UIBezierPath 'cacheImage' 是 CGImageRef 'imageContext' 是 CGContextRef

任何帮助深表感谢!如果您能想到更好的方法,请告诉我!但是,我确实需要缓存图像具有透明背景,因此它只是可见的路径,因为稍后我将在此工作时应用一些东西!

编辑此外,我每次都删除点以保持绘图速度,所以你知道!

提前致谢 :)

0 投票
1 回答
562 浏览

objective-c - CGBitmapContext为 RBG565 创建 bitsPerComponent

我正在尝试创建一个CGContextRefusing CGBitmapContextCreate. 我要创建的位图是 RBG565(红色和蓝色是 5 位,绿色是 6 位)。的参数之一CGBitmapContextCreatebitsPerComponent。由于我有 variable bitsPerComponent,我不确定是否将其设置为 5,或者有更好的方法吗?

谢谢。