我在一個應用程序中工作,我需要繪製任何輸入圖像的直方圖。我可以成功繪製直方圖,但不像它在Mac OS中的PREVIEW中那樣清晰。繪圖直方圖在iPhone中需要更高的準確度
作爲代碼太大,我已經上傳到的GitHub Click here to Download
的RGB值被讀入
-(void)readImage:(UIImage*)image
{
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = (unsigned char*) calloc(height * width * 4, sizeof(unsigned char));
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
for (int yy=0;yy<height; yy++)
{
for (int xx=0; xx<width; xx++)
{
// Now your rawData contains the image data in the RGBA8888 pixel format.
int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel;
for (int ii = 0 ; ii < 1 ; ++ii)
{
CGFloat red = (rawData[byteIndex] * 1.0) ;
CGFloat green = (rawData[byteIndex + 1] * 1.0) ;
CGFloat blue = (rawData[byteIndex + 2] * 1.0) ;
// CGFloat alpha = (rawData[byteIndex + 3] * 1.0)/255.0;
byteIndex += 4;
// TYPE CASTING ABOVE FLOAT VALUES TO THAT THEY CAN BE MATCHED WITH ARRAY'S INDEX.
int redValue = (int)red;
int greenValue = (int)green;
int blueValue = (int)blue;
// THESE COUNTERS COUNT " TOTAL NUMBER OF PIXELS " FOR THAT Red , Green or Blue Value IN ENTIRE IMAGE.
fltR[redValue]++;
fltG[greenValue]++;
fltB[blueValue]++;
}
}
}
[self makeArrays];
free(rawData);
}
予C中的數組變量,FLTR,fltG,FLTB存儲的值。
我有一個類ClsDrawPoint它具有構件
@property CGFloat x;
@property CGFloat y;
然後製備含有具有FLTR的[]索引ClsDrawPoint的物體作爲該索引爲Y值的X值和值的數組。
陣列製備和圖形在
-(void)makeArrays
方法繪製
您可能看到結果
目前其不那麼精確,因爲它是在PREVIEW在mac爲相同的圖像。您可以在Mac的PREVIEW應用程序中打開圖像,然後在工具>調整顏色中,您將能夠看到該圖像的直方圖。 我認爲如果我的圖表出現錯誤,它會更清晰。請檢查我的代碼,並建議我,如果你發現無論如何,使其更加準確。
感謝NSValue,我真的不知道這一點。圖表是準確的,但仍然不如預覽中那麼準確..你能給我更多的建議嗎? – HarshIT
我努力嘗試,但無法得到更多的方式....謝謝。這些贊成票是爲你的手工作... – HarshIT