Ich arbeite in einer App, in der ich Histogramm von jedem eingefügten Bild zeichnen muss. Ich kann Histogramm erfolgreich zeichnen, aber es ist nicht so scharf wie in PREVIEW in Mac OS.Zeichnung Histogramm benötigt mehr Genauigkeit in iPhone
als Code zu groß ist, ich es GitHub hochgeladen Click here to Download
Die RGB-Werte werden in
lesen-(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 gespeicherten Werte in c Feldvariablen, FLTR, fltG, fltB.
Ich habe eine Klasse ClsDrawPoint es Mitglieder
@property CGFloat x;
@property CGFloat y;
Dann zubereitet ein Array mit Objekten der ClsDrawPoint mit FLTR [] 's Index als X-Wert und den Wert für diesen Index als Y Wert hat.
Array hergestellt und Graph in
-(void)makeArrays
Methode
Sie das Ergebnis
gezogen wird Derzeit sehen kann seine nicht so genau, wie es in PREVIEW ist in Mac für das gleiche Bild. Sie können ein Bild in der PREVIEW-App auf Mac öffnen und unter Extras> Farbe anpassen können Sie das Histogramm dieses Bildes sehen. Ich denke, wenn mein Graph akkraten wird, wird es schärfer sein. Überprüfen Sie bitte meinen Code und schlagen Sie mir vor, wenn Sie es dennoch finden, um es genauer zu machen.
danke für NSValue, das wusste ich wirklich nicht. Graph ist genau, aber immer noch nicht so genau wie in der Vorschau .. Können Sie mir mehr vorschlagen ??? – HarshIT
ich habe versucht, aber konnte nicht mehr weg .... danke. Diese Stimmen sind für deine Handarbeit ... – HarshIT