gpt4 book ai didi

objective-c - 检测图像上的大多数黑色像素 - objective-c iOS

转载 作者:行者123 更新时间:2023-11-28 23:07:59 24 4
gpt4 key购买 nike

我有一张图!好久没做像素检测了,我记得你得通过某种方式把像素转换成数组,然后求出图像的宽度,才能知道像素什么时候到达一行的末尾,然后转到下一个啊,很多复杂的东西哈哈!无论如何,我现在不知道该怎么做了,但我需要检测名为“image1”的图像最左边最暗像素的 x 和 y 坐标...有什么好的起点吗?

最佳答案

去你的书店,找一本 Erica Sadun 的书,叫做“iOS Developer's Cookbook”。转到第 378 页,那里有像素检测的方法。您可以查看这个 RGB 值数组并运行 for 循环来排序并找到 R、G 和 B 值总和最小的像素(这将为 0-255),这将为您提供最接近黑色的像素.如果需要,我也可以发布代码。但这本书是最好的来源,因为它提供了方法和解释。

这些是我的,有一些变化。方法名称保持不变。我所更改的只是基本上来自图像选择器的图像。

-(UInt8 *) createBitmap{
if (!self.imageCaptured) {
NSLog(@"Error: There has not been an image captured.");
return nil;
}
//create bitmap for the image
UIImage *myImage = self.imageCaptured;//image name for test pic
CGContextRef context = CreateARGBBitmapContext(myImage.size);
if(context == NULL) return NULL;
CGRect rect = CGRectMake(0.0f/*start width*/, 0.0f/*start*/, myImage.size.width /*width bound*/, myImage.size.height /*height bound*/); //original
// CGRect rect = CGRectMake(myImage.size.width/2.0 - 25.0 /*start width*/, myImage.size.height/2.0 - 25.0 /*start*/, myImage.size.width/2.0 + 24.0 /*width bound*/, myImage.size.height/2.0 + 24.0 /*height bound*/); //test rectangle

CGContextDrawImage(context, rect, myImage.CGImage);
UInt8 *data = CGBitmapContextGetData(context);
CGContextRelease(context);
return data;
}
CGContextRef CreateARGBBitmapContext (CGSize size){

//Create new color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
if (colorSpace == NULL) {
fprintf(stderr, "Error allocating color space\n");
return NULL;
}
//Allocate memory for bitmap data
void *bitmapData = malloc(size.width*size.height*4);
if(bitmapData == NULL){
fprintf(stderr, "Error: memory not allocated\n");
CGColorSpaceRelease(colorSpace);
return NULL;
}
//Build an 8-bit per channel context
CGContextRef context = CGBitmapContextCreate(bitmapData, size.width, size.height, 8, size.width*4, colorSpace, kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);
if (context == NULL) {
fprintf(stderr, "Error: Context not created!");
free(bitmapData);
return NULL;
}
return context;

}
NSUInteger blueOffset(NSUInteger x, NSUInteger y, NSUInteger w){
return y*w*4 + (x*4+3);
}
NSUInteger redOffset(NSUInteger x, NSUInteger y, NSUInteger w){
return y*w*4 + (x*4+1);
}

底部的方法 redOffset 将为您提供 ARGB(Alpha-Red-Green-Blue)比例中的红色值。要更改您正在查看的 ARGB 中的 channel ,请将添加到 redOffset 函数中的 x 变量的值更改为 0 以查找 alpha,将其保持在 1 以查找红色,2 以查找绿色,以及 3 以查找蓝色。这是有效的,因为它只查看在上述方法中创建的数组,并且添加到 x 占索引值。本质上,使用三种颜色(红色、绿色和蓝色)的方法,并找到每个像素的总和。红色、绿色和蓝色的总和值最低的像素是最黑的。

关于objective-c - 检测图像上的大多数黑色像素 - objective-c iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com