我正在使用for循环遍历屏幕的每个像素。
for (int x_axis=0; x_axis<screenWidth; x_axis++)
{
for (int y_axis=0; y_axis<screenHeight; y_axis++)
{
// some code
}
}
现在发生的是,由于哪个应用程序冻结,它会通过屏幕的所有像素。有没有其他方法我可以遍历屏幕的每个像素,应用程序将不会冻结。请帮忙
好吧,我想要的是知道每个像素的颜色是什么,所以我使用这个2 for循环。有人可以说,我怎么能得到屏幕所有像素的颜色。我知道如何知道每个像素的颜色。但是,我想检查每个像素颜色,我将不得不遍历屏幕的所有像素。
答案 0 :(得分:0)
也许你的代码很慢?如果您使用的是错误的算法,则可能需要几分钟才能遍历屏幕的所有像素。您可以在内部循环之前放置NSLog(@"looping. x_axis=%d", x_axis);
之类的内容,以查看算法的速度有多快或者它在任何地方崩溃或只是懒散
答案 1 :(得分:0)
使用dispatch_async
创建新的调度队列(在主队列上执行代码会导致您的应用冻结)
dispatch_queue_t queue = dispatch_queue_create("My new Q",NULL);
然后像这样在这个队列上调度你的循环:
dispatch_async(queue, ^{
for (int x_axis=0; x_axis<screenWidth; x_axis++)
{
for (int y_axis=0; y_axis<screenHeight; y_axis++)
{
// some code
}
}
});
这将使您的代码异步运行并且不会阻塞您的主线程,同时浏览屏幕上的每个像素都有点过分。如果您想确切了解运行代码需要多长时间,请使用以下代码更改上面的代码:
dispatch_async(queue, ^{
NSDate *startTime = [NSDate date];
for (int x_axis=0; x_axis<screenWidth; x_axis++)
{
for (int y_axis=0; y_axis<screenHeight; y_axis++)
{
// some code
}
}
NSLog(@"Time: %d", [[NSDate date] timeIntervalSinceDate:startTime]); //in seconds
});
运行此循环将返回值:0.027331sec。如果我更换&#34; //某些代码&#34;同
[NSString stringWithFormat:@"X_AXIS:%d Y_AXIS:%d",x_axis, y_axis]
并将其添加到数组中,时间为0.463264秒。因此,如果您要检查每个像素的颜色,则需要花费大量时间才能完成。
如果有帮助,请告诉我。