이미지의 원시 픽셀에 액세스하려고하지만 실제로 계속 붙어있는 문제가 계속 발생합니다. 나는 iPhone 프로그래밍에 익숙하지 않기 때문에 정말 간단 할 수도 있습니다 ...iPhone 데이터 프로그래밍을위한 CFDataRef 및 픽셀 데이터
여기에있는 클래스는 이미지에서 CGImageRef
을 사용하고 개별 픽셀을 봅니다. 여기 내 코드는
헤더 파일 :
#import <QuartzCore/QuartzCore.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreImage/CoreImage.h>
@interface GraphingView : UIControl
{
@private
CAShapeLayer *shapeLayer;
CGImageRef pixelData;
}
@property(assign) CGImageRef pixelData;
@end
그리고 내 구현 파일 :
#import "GraphingView.h"
#import "iSpectrumViewController.h"
@implementation GraphingView
@synthesize pixelData;
- (void)awakeFromNib
{
// set up a rounded border
CALayer *layer = [self layer];
// clear the view's background color so that our background
// fits within the rounded border
CGColorRef backgroundColor = [self.backgroundColor CGColor];
self.backgroundColor = [UIColor clearColor];
layer.backgroundColor = backgroundColor;
shapeLayer = [CAShapeLayer layer];
[self setNeedsDisplay];
}
- (void)drawRect:(CGRect)rect
{
}
- (void)updateGraph
{
// This is where my problem is:
// Whenever the next line is executed the application stops working. It works fine in the setPixelData
// down below.
CFDataRef pixelRef = CGDataProviderCopyData(CGImageGetDataProvider(pixelData));
CFIndex byteSize = CFDataGetLength(pixelRef);
int intByteSize = (int) byteSize;
NSLog(@"Number of Bytes contained %i",intByteSize);
//Then get a pointer to the data so the information can be accessed
const UInt8 *pixelPtr = CFDataGetBytePtr(pixelRef);
// Do some drawing here using the data obtained from the image...
[shapeLayer setPath:path];
[shapeLayer setNeedsDisplay];
CFRelease(path);
}
-(void)setPixelData:(CGImageRef)pixelImage
{
//This code takes the CGImage from my image and copies it to the pixelData CGImageRef defined in the header file
//This gets the CFDataRef from the CGImage so the pixel information is available
CFDataRef PixelCopy = CGDataProviderCopyData(CGImageGetDataProvider(pixelImage));
CFIndex byteSize = CFDataGetLength(PixelCopy);
int intByteSize = (int) byteSize;
NSLog(@"Number of Bytes contained %i",intByteSize);
pixelData = CGImageCreateCopy(pixelImage);
[self updateGraph];
}
@end
내가 가진 문제는 다음과 같습니다
이기능 setPixelData
는 CGImageRef
이미지와 카피를 가져옵니다 그것을 pixelData
. 그런 다음 (void) updateGraph
방법을 사용하여 CGImageRef pixelData
을 사용하고 CFDataRef
을 만들어 원시 픽셀 데이터를 얻습니다. 그러나 뭔가 잘못된 것이 있습니다. 왜냐하면 CFDataRef pixelRef
을 입력으로 사용하여 CFDataGetLength
메서드를 사용할 때 프로그램을 실행할 때 EXC_BAD_ACCESS
오류가 발생하기 때문입니다. 저를 혼란스럽게하는 이유는 동일한 두 줄의 코드를 (void) setPixelData
함수에 넣고 코드를 updateGraph
으로 주석 처리하면 프로그램이 완벽하게 잘 돌아갑니다.
이 오류의 원인과 해결 방법은 무엇입니까?
감사합니다,
샘
왜'CGImageGetData()'를 사용하지 않습니까? – nielsbot