gpt4 book ai didi

iphone - 使用ios查找像素的坐标

转载 作者:行者123 更新时间:2023-12-01 16:50:31 24 4
gpt4 key购买 nike

我在 ios 开发中使用核心图像框架来查找图像像素的颜色,我正在使用以下代码

CGImageRef imgSource = self.ImageView.image.CGImage;
CFDataRef m_DataRed1 = CGDataProviderCopyData(CGImageGetDataProvider(imgSource));
UInt8 *dataOrignal = (UInt8 *)CFDataGetBytePtr(m_DataRed1);
double lenghtSource = CFDataGetLength(m_DataRed1);
NSLog(@"lenght : %f",lenghtSource);
int redPixel;
int greenPixel;
int bluePixel;

for (int index=0 ; index<lenghtSource; index+=4) {
if (dataOrignal[index+1] ==236 || dataOrignal[index+2]==236 || dataOrignal[index+3]==236) {
dataOrignal[index + 1] = 205;
dataOrignal[index +2] = 25;
dataOrignal[index+3]= 55;
NSLog(@"this the value of red channel %d", index);
}


}


NSUInteger width = CGImageGetWidth(imgSource); //202
NSUInteger height = CGImageGetHeight(imgSource);//173
size_t bitsPerComponent = CGImageGetBitsPerComponent(imgSource);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imgSource);
size_t bytesPerRow = CGImageGetBytesPerRow(imgSource);


NSLog(@"the width = %u and height=%u of the image is ",width,height );
NSLog(@"the bits per component is %zd", bitsPerComponent);
NSLog(@"the bits per pixel is %zd", bitsPerPixel);
NSLog(@"the bytes per row is %zd" , bytesPerRow);


CGColorSpaceRef colorspace = CGImageGetColorSpace(imgSource);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imgSource);
CFDataRef newData = CFDataCreate(NULL, dataOrignal, lenghtSource);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(newData);

CGContextRef context = CGBitmapContextCreate(newData, width, height, bitsPerComponent, bytesPerRow, colorspace, bitmapInfo);
CGPoint point = CGContextGetTextPosition(context);
NSInteger xx = point.x;
point.y;

NSLog(@"this is the value of x axis %d",xx);

CGImageRef newImg = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorspace, bitmapInfo, provider, NULL, true, kCGRenderingIntentDefault);





UIImage *newImage1 = [UIImage imageWithCGImage:newImg];
self.ImageView.image = newImage1;

但现在我想要的是像素的 x 和 y 轴,所以有人可以帮我吗?或者有人已经完成了这段代码吗?请注意,我没有使用opencv,如果您知道opencv,请完全指导

最佳答案

我希望这就是你要找的。

我将获取宽度和高度的函数调用移动到 for 循环之上,以便它们可以在 for 循环中用于 x 和 y 坐标计算。此外,您可能一直在为红色 channel 打印错误的值。我还为您的 CG 对象添加了适当的发布调用。我不知道您是否必须释放 CF 对象。

CGImageRef imgSource = self.ImageView.image.CGImage;
CFDataRef m_DataRed1 = CGDataProviderCopyData(CGImageGetDataProvider(imgSource));
UInt8 *dataOrignal = (UInt8 *)CFDataGetBytePtr(m_DataRed1);
double lenghtSource = CFDataGetLength(m_DataRed1);
NSLog(@"lenght : %f",lenghtSource);
int redPixel;
int greenPixel;
int bluePixel;

int triggeredIndex = 0;
NSUInteger width = CGImageGetWidth(imgSource); //202
NSUInteger height = CGImageGetHeight(imgSource);//173

for (int index=0 ; index<lenghtSource; index+=4)
{
if (dataOrignal[index+1] ==236 || dataOrignal[index+2]==236 || dataOrignal[index+3]==236)
{
dataOrignal[index+1] = 205;
dataOrignal[index+2] = 25;
dataOrignal[index+3] = 55;

int xcoord = index / (int)(4*width); //Don't think the casts are necessary, but just in case...
int ycoord = index % (int)(4*width);

//use xcoord and ycoord here...

//NSLog(@"this the value of red channel %d", index);
//did you mean this?
NSLog(@"this the value of red channel %d", dataOrginal[index]);
}
}


//moved width and height to before the loop
size_t bitsPerComponent = CGImageGetBitsPerComponent(imgSource);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imgSource);
size_t bytesPerRow = CGImageGetBytesPerRow(imgSource);


NSLog(@"the width = %u and height=%u of the image is ",width,height );
NSLog(@"the bits per component is %zd", bitsPerComponent);
NSLog(@"the bits per pixel is %zd", bitsPerPixel);
NSLog(@"the bytes per row is %zd" , bytesPerRow);


CGColorSpaceRef colorspace = CGImageGetColorSpace(imgSource);
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imgSource);
CFDataRef newData = CFDataCreate(NULL, dataOrignal, lenghtSource);
CGDataProviderRef provider = CGDataProviderCreateWithCFData(newData);

CGContextRef context = CGBitmapContextCreate(newData, width, height, bitsPerComponent, bytesPerRow, colorspace, bitmapInfo);
CGPoint point = CGContextGetTextPosition(context);
NSInteger xx = point.x;
point.y; //this is unnecessary and does nothing

NSLog(@"this is the value of x axis %d",xx);

CGImageRef newImg = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorspace, bitmapInfo, provider, NULL, true, kCGRenderingIntentDefault);





UIImage *newImage1 = [UIImage imageWithCGImage:newImg];
self.ImageView.image = newImage1;

//always remember to clean up after yourself!
CGImageRelease(imgSource);
CGColorSpaceRelease(colorspace);
CGDataProviderRelease(provider);
CGContextRelease(context);
CGImageRelease(newImg);

记住,不要忘记释放你的 CG 对象!

关于iphone - 使用ios查找像素的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388494/

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