Pracuję w aplikacji, w której muszę narysować histogram dowolnego wprowadzonego obrazu. Mogę narysować Histogram, ale nie jest tak ostry jak w PREVIEW w Mac OS.Histogram rysunkowy potrzebuje większej dokładności w iPhonie
Jako kod jest zbyt duży, mam wysłał go do GitHub Click here to Download
wartości RGB są odczytywane w
-(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);
}
I przechowywanych wartości w zmiennych c tablicy FLTR, fltG, fltB.
mam klasy ClsDrawPoint ma elementy
@property CGFloat x;
@property CGFloat y;
Następnie wytwarza się układ zawierający przedmioty o [] jest wskaźnikiem FLTR ClsDrawPoint jako wartość X i wartość tego wskaźnika jako wartości y.
tablica jest przygotowany i wykres jest zasysane
-(void)makeArrays
metodą
można zobaczyć wynik
Obecnie jego nie jest tak dokładna, jak to jest podgląd w mac dla tego samego obrazu. Możesz otworzyć obraz w aplikacji PREVIEW na Macu i w Narzędzia> AdjustColor, zobaczysz Histogram tego obrazu. Myślę, że jeśli mój wykres jest zgodny, to będzie ostrzejszy. Prosimy o sprawdzenie mojego kodu i zasugeruj, czy i tak znajdziesz go, aby był dokładniejszy.
dzięki za NSValue, naprawdę nie wiedziałem tego. Wykres jest dokładny, ale nadal nie jest tak dokładny, jak na podglądzie. Czy możesz mi zasugerować więcej ??? – HarshIT
Próbowałem ciężko, ale nie mogłem uzyskać więcej ... dzięki. te głosy są do Twojej pracy ręcznej ... – HarshIT