- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要捕获桌面图像并处理其 RGB 数据,我正在使用 Quartz API 来执行相同的操作,
我面临的问题是内存使用率高,
请引用函数,
在这里编辑,该函数是通过 pThread 调用的;像这样的东西,
void ImageProcessing::thread(){
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
ImgRef sImageRef
while( active){
**strong text**
if ([currentWnd getCurrentRGBImage:¤tImg]){
/* do something here */
}
}
[pool release];
}
-(bool)getCurrentRGBImage:(ImgRef *)pImgRef{
CGImageRef pCGImageRef;
pCGImageRef = [self getDesktopImage];
if ( !pCGImageRef ){
NSLog(@" got NULL Image ");
CGImageRelease(pCGImageRef);
pCGImageRef = NULL;
return NO;
}
// Create a bitmap rep from the image...
size_t width = CGImageGetWidth(pCGImageRef);
size_t height = CGImageGetHeight(pCGImageRef);
int bytesPerRow = CGImageGetBytesPerRow(pCGImageRef);
int bytesPerPixel = CGImageGetBitsPerPixel(pCGImageRef)/8;
CGDataProviderRef provider = CGImageGetDataProvider(pCGImageRef);
CFDataRef pData = CGDataProviderCopyData(provider);
const uint8_t* bytes = (const uint8_t *)CFDataGetBytePtr(pData);
/***** ------------- *********
Copy RAW Bytes to pImgRef
****************************/
CGDataProviderRelease(provider);
CFRelease(pData);
CGImageRelease(pCGImageRef);
pCGImageRef = NULL;
return YES;
}
而getDesktopImage函数是
-(CGImageRef)getDesktopImage{
CGImageRef screenShot;
screenShot = CGWindowListCreateImage(CGRectInfinite, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);
return screenShot;
}
问题是,总的来说这个函数消耗了大量的内存,*pImgRef只有一个实例,只有像素,RGB操作,
内存使用情况我指的是Mac Activity Monitor,它可靠吗?
文档Documentation for CGDataProviderRelease提到应用程序需要维护它的保留和释放,所以我正在调用 CGDataProviderRelease 但在控制台中收到消息malloc 引用计数下溢导致 auto_refcount_underflow_error 中断以进行调试
我不应该调用 CGDataProviderRelease() 吗?如果我发表评论,我不会收到此消息,所以不确定它是否是 Quartz 中的错误或我的代码中的错误,
此外,这个函数消耗了大量内存,如果我检查事件监视器,可以安全地假设它确实使用了这么多内存吗?
最佳答案
由于您不保留、创建或复制数据提供程序,因此不应释放它。
我没有看到任何会导致内存消耗过多的内容,但您遗漏了一些代码。
关于objective-c - CG图像引用 |内存消耗|泄露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218272/
是否有任何直观的解释说明为什么预处理共轭梯度 (CG) 算法比基本 CG 算法收敛得更快。 最佳答案 共轭梯度等价于预条件子的单位矩阵的预条件共轭梯度。如果您可以使用矩阵本身作为预调节器,那么 PCG
我正在尝试从 iOS 中的图像 Assets 中读取 ARGB 像素。为此,我需要一个 CGImageRef,我可以用它来获取它的 CGDataProvider。我的问题是,如果我创建一个 CGIma
我正在使用 GC用于在内部编写着色器 Unity3D . 我正在使用顶点颜色属性将一些参数传递给着色器。它们不会用于定义颜色,并且应该从顶点着色器转发到像素着色器而不修改它们。 这是我作为从 Unit
我正在开发适用于 iOS 的绘图应用程序。在这个应用程序中,我需要绘制纹理线条。为此,我正在使用 this method .But texture 太小了而且形状不对。 我想知道我做错了什么,我该如何
我试图旋转用相机拍摄的 2448x3264 的 UIImage。当我这样做时,内存大约会达到 120Mb 的峰值,大约持续 3/4 秒,然后恢复到正常状态。问题在于,在内存较少的设备(例如 ipod
我正在尝试通过 unity/CG/hlsl 中的计算着色器将纹理转换到频域,即我正在尝试从纹理中读取像素值并输出一组基函数系数。我该怎么做?我真的是计算着色器的新手,所以我有点迷路了。我了解竞争条件的
我可以在 OpenGL ES 2.0 中使用 Cg 着色器语言吗? 我知道我可以在 OpenGL ES 2.0 中使用 GLSL,在 OpenGL 中使用 Cg,但我想知道是否有对 OpenGL ES
我是着色器的新手,我想找到可用于编写 CG 着色器的所有(或大多数/常见)函数、变量的列表。 最佳答案 这应该让你开始:http://http.developer.nvidia.com/Cg/inde
在我的引擎中,我从成对的顶点/像素着色器文件中加载 Cg 着色器。我希望能够堆叠着色器以组合它们(照明+ Material 等)。除了将着色器分解为单独的函数然后从中创建单个着色器脚本字符串之外,您是
我想看一个使用 nVidia Cg 渲染到屏幕外帧缓冲区对象的示例。 我可以访问的计算机有显卡但没有显示器(或 X 服务器)。所以我想渲染我的东西并将它们作为图像输出到磁盘上。显卡为GTX285。 最
为了存储在集合类中,将基于 CoreGraphics 结构的值(例如 CGRect、CGPoint 等)存储到适当的对象中的最佳做法是什么? 您可以使用 NSValue: NSMutableA
我使用 Ogre3D 作为图形引擎。 我手动创建了一个工作正常的网格,uv 是正确的并且设置为表示网格坐标(对于这个例子,网格是 10 x 10) 我在顶点程序中什么都不做,有一个非常简单的片段程序。
我已经在我的应用程序中实现了一个摄像头,我想知道什么是 CGinterpolationquality。关于它的作用的文档不多。 最佳答案 来自CGContext Reference : Returns
我正在尝试用 Cg 实现聚光灯效果。 我已经设法做正常的环境和漫射照明。 我了解聚光灯的基本功能(位置、方向、截止角度),但在 Cg 中处理这些仍然让我望而却步。 这就是我计算聚光灯参数的方式: fl
Apple 基础套件中是否提供了适当的结构来表示离散坐标系?我知道我可以只使用 NSPoint 的整体组件,并按照惯例保持它的离散性,甚至可以定义我自己的组件。 但是,如果已经有一个输入正确,我会更喜
在 SLURM 集群上可以使用 squeue获取有关系统上作业的信息。 我知道“R”的意思是 r 放松;和“PD”的含义电话 zh d ing,但什么是“CG”? 我理解这是从经验中“取消”或“失败”
什么是 CG相当于 GLSL功能 texelFetchOffset ? 最佳答案 根据 nVidia documentation : tex2Dfetch - 在给定的采样器中执行未过滤的纹理查找。
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
我正在 Windows 上开发一个 OpenGL 项目,使用 GLEW 来提供所提供的 Windows header 所缺乏的功能。对于着色器支持,我使用 NVIDIA 的 Cg。我读过的所有文档和代
是否可以使用 Cg 修改片段(像素)着色器中的像素坐标?我确信此类功能在第二代/第三代着色器中可用,但我不知 Prop 体的配置文件是什么,也不知道如何使用。 最佳答案 不,这是不可能的。 您可以在片
我是一名优秀的程序员,十分优秀!