Я пытаюсь обработать входное изображение, прочитав все пиксели его данных, а затем сравнить со всеми цветами в массиве, чтобы создать новое изображение. Но я заблудился в проблемах и застрял. Пожалуйста, помогите, это то, что у меня сейчас.
//This is find different of two UIColor
int ColorDiff(UIColor *color1 ,UIColor *color2){
...Compare RGB components going on
}
My first try
// init vars
int d = 0; // squared error
int idx = 0; // index of color
int min = 1000000; // min difference
int paletteSize = pathArray.count; // number of available color
UIColor *currentRGB; // current color at a pixel in image
UIColor *paletteRGB; // palette color
// visit each output pixel and determine closest color from array
for(int y=0; y<sizeY; y++) { // sizeY in pixel is height of processing image
for(int x=0; x<sizesX; x++) { // sizeX in pixel is width of processing image
// inputImgAvg is image for processing
currentRGB = [inputImgAvg colorAtPixel:CGPointMake(x,y)];
// find closest color match in array: init idx with index
// of closest match; keep track of min to find idx
min = 1000000;
idx = 0;
for(int i = 0; i < paletteSize ;i++){
//colorAverages is array holding avail color
paletteRGB = [colorAverages objectAtIndex:i];
d = ColorDiff(paletteRGB ,currentRGB);
if( d< min){
min = d;
idx = i;
}
}
// best matching color is found in idx position in vector;
// I'm stuck here how to draw [colorAverages objectAtIndex:idx]
// which is best matching for current pixel on image
Я не знаю, как распечатать обработанное изображение.
My second try
//This is how it get image data for processing
CGImageRef srcImgProcess = inputImgAvg.CGImage; //inputImgAvg is image at begin
CFDataRef theData;
theData = CGDataProviderCopyData(CGImageGetDataProvider(srcImgProcess));
UInt8 *pixelData = (UInt8 *) CFDataGetBytePtr(theData);
int dataLength = CFDataGetLength(theData);
//PROBLEM IS HERE...
//Now I loop thru the pixeldata
for (int i = 0; i < dataLength; i += 4) { // I hope increment by 4 is corrected, bc RGBA
// listAvailColor is an array holding available color for image processing
currentRGB = [listAvailColor objectAtIndex:i]
// I'm stuck here. How to use pixelData for the comparison?
// I want to compare pixelData[i] and currentRGB by using my function "ColorDiff(UIColor *color1 ,UIColor *color2)" and then
// It should return "useful datas" for CGContextRef for drawing new image.
// That's all my thought right now.
// If you guys have any idea, please help to solve this.
}
Пожалуйста, помогите мне. Любые советы будут с благодарностью