我很想确切地研究如何尽可能简明地做到这一点。 下面我解释如何做到这一点,并列出所有必要的守则:
In order to allow touch interaction to select a pixel, first add a UITapGestureRecognizer
to your GLKViewController
subclass (assuming you want tap-to-select-pixel), with the following target method inside that class. You must make your GLKViewController
subclass a UIGestureRecognizerDelegate
:
@interface GLViewController : GLKViewController <GLKViewDelegate, UIGestureRecognizerDelegate>
在您的姿态识别器上,在<编码>view上添加(在GLKViewController
上,实际上为GLKView
):
// Inside GLKViewController subclass init/awakeFromNib:
[[self view] addGestureRecognizer:[self tapRecognizer]];
[[self tapRecognizer] setDelegate:self];
为您的姿态识别员确定目标行动;在使用特定<代码>init......时,你可以这样做,然而,我却利用故事板(在Xcode4.2中打新的界面)制造了地雷,并用这种方式加以控制。
Anyway, here s my target action for the tap gesture recognizer:
-(IBAction)onTapGesture:(UIGestureRecognizer*)recognizer {
const CGPoint loc = [recognizer locationInView:[self view]];
[self pickAtX:loc.x Y:loc.y];
}
在我的<编码>GLKViewController子流中,有一门I ve被指:
-(void)pickAtX:(GLuint)x Y:(GLuint)y {
GLKView *glkView = (GLKView*)[self view];
UIImage *snapshot = [glkView snapshot];
[snapshot pickPixelAtX:x Y:y];
}
这种方法利用了一种手法的新方法snapshot
,即 Apple在GLKView
上,以便产生一个<代码>UIImage,从背后编码。
值得注意的是<代码>snapshot中的评论。 内容提要文件:
This method should be called whenever your application explicitly
needs the contents of the view; never attempt to directly read the
contents of the underlying framebuffer using OpenGL ES functions.
这使我感到奇怪的是,我早先试图在试图获取六氯代苯数据时援引<条码>glReadPixels的尝试,以及把正确道路倒塌的指标。
页: 1 一段时期前,我称之为<代码>pickPixelAtX:Y: on the UIImage
。 这是在“编码”栏目中添加的一种方法:
@interface UIImage (NDBExtensions)
-(void)pickPixelAtX:(NSUInteger)x Y:(NSUInteger)y;
@end
这里是执行;它载有必要的最后法典。 该守则来自。 问题,并根据收到的答复加以修正:
@implementation UIImage (NDBExtensions)
- (void)pickPixelAtX:(NSUInteger)x Y:(NSUInteger)y {
CGImageRef cgImage = [self CGImage];
size_t width = CGImageGetWidth(cgImage);
size_t height = CGImageGetHeight(cgImage);
if ((x < width) && (y < height))
{
CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
CFDataRef bitmapData = CGDataProviderCopyData(provider);
const UInt8* data = CFDataGetBytePtr(bitmapData);
size_t offset = ((width * y) + x) * 4;
UInt8 b = data[offset+0];
UInt8 g = data[offset+1];
UInt8 r = data[offset+2];
UInt8 a = data[offset+3];
CFRelease(bitmapData);
NSLog(@"R:%i G:%i B:%i A:%i",r,g,b,a);
}
}
@end
最初,我尝试了在阿普尔特普切案中发现的一些相关代码:“从CGImage的角度来看待六氯苯数据”,其中要求有2个方法定义,而不是1个方法定义,但还需要更多的代码,并且有“避免”号码”数据,因此我无法执行正确的解释。
!! 在你的项目中添加这一编号,然后在绘制一张图时,它将以下列形式产生:
R:24 G:46 B:244 A:255
当然,你应写出一些方法,以摘取欧洲复兴开发银行的内在价值(在0-255之间),并使用这些价值。 一种做法是从上述方法中收回一个<编码>UIColor,即:
UIColor *color = [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.0f];