我有一个UIImage(Cocoa Touch).从那以后,我很高兴得到一个CGImage或其他你想要的东西.我想写这个函数:
- (int)getRGBAFromImage:(UIImage *)image atX:(int)xx andY:(int)yy {
// [...]
// What do I want to read about to help
// me fill in this bit, here?
// [...]
int result = (red << 24) | (green << 16) | (blue << 8) | alpha;
return result;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我试图用Swift获取UIImage中像素的颜色,但它似乎总是返回0.这是代码,从@Minas的答案转换到这个线程:
func getPixelColor(pos: CGPoint) -> UIColor {
var pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage))
var data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
var pixelInfo: Int = ((Int(self.size.width) * Int(pos.y)) + Int(pos.x)) * 4
var r = CGFloat(data[pixelInfo])
var g = CGFloat(data[pixelInfo+1])
var b = CGFloat(data[pixelInfo+2])
var a = CGFloat(data[pixelInfo+3])
return UIColor(red: r, green: g, blue: b, alpha: a)
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
关于如何获得给定点的图像的像素颜色存在许多问题/答案.但是,对于大型图像(例如,甚至小到1000 x 1300),所有这些答案都非常慢(100-500ms).
大多数代码示例都绘制到图像上下文.当实际抽签时,所有这些都需要时间:
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage)
Run Code Online (Sandbox Code Playgroud)
在Instruments中对此进行检查后发现,通过从源图像复制数据来完成绘制:

我甚至尝试过不同的方法来获取数据,希望自己获得字节实际上会更有效率.
NSInteger pointX = trunc(point.x);
NSInteger pointY = trunc(point.y);
CGImageRef cgImage = CGImageCreateWithImageInRect(self.CGImage,
CGRectMake(pointX * self.scale,
pointY * self.scale,
1.0f,
1.0f));
CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
CFDataRef data = CGDataProviderCopyData(provider);
CGImageRelease(cgImage);
UInt8* buffer = (UInt8*)CFDataGetBytePtr(data);
CGFloat red = (float)buffer[0] / 255.0f;
CGFloat green = (float)buffer[1] / 255.0f;
CGFloat blue = (float)buffer[2] / 255.0f;
CGFloat alpha = (float)buffer[3] / 255.0f;
CFRelease(data);
UIColor *pixelColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; …Run Code Online (Sandbox Code Playgroud) 我想在Swift中操作像素级别的图像.针对目标c回答了这个问题:如何访问和操作JPEG图像像素?,但我想看看Swift的等效来源.
我正在检查图像是否有透明区域(alpha).在此基础上,我必须改变颜色UIImage
我已经实现了以下方法来检查图像是否有alpha.
- (BOOL) checkAlpha : (UIImage*) image
{
for(int x = 0; x < image.size.width ; x++)
{
for(int y = 0; y < image.size. height; y++)
{
CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
const UInt8* data = CFDataGetBytePtr(pixelData);
int pixelInfo = ((image.size.width * y) + x ) * 4; // The image is png
UInt8 red = data[pixelInfo]; // If you need this info, enable it
UInt8 green = data[(pixelInfo + 1)]; // If you need this …Run Code Online (Sandbox Code Playgroud) 我有一个UIImage显示在UIImageView.我还有另一张图像位于UIImageView第一张图像上方.我希望能够仅在第一个图像的边框内拖动第二个图像.为了让我的目标更清晰一点,请看这张图片:http:
//img689.imageshack.us/img689/6136/56308823.png.
绿色引脚应该是可拖动的,但不应该将引脚拖动到蓝色(地图外部).此刻引脚是可拖动的,但我不知道如何检查引脚是否在地图之外.
编辑:我在我的UIImageView子类中使用此方法的可拖动引脚:
- (UIColor *)colorAtPosition:(CGPoint)position {
CGRect sourceRect = CGRectMake(position.x, position.y, 1.f, 1.f);
CGImageRef imageRef = CGImageCreateWithImageInRect([[MapViewController sharedMapViewController]getImage].CGImage, sourceRect);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *buffer = malloc(4);
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big;
CGContextRef context = CGBitmapContextCreate(buffer, 1, 1, 8, 4, colorSpace, bitmapInfo);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0.f, 0.f, 1.f, 1.f), imageRef);
CGImageRelease(imageRef);
CGContextRelease(context);
CGFloat r = buffer[0] / 255.f;
CGFloat g = buffer[1] / 255.f;
CGFloat b = buffer[2] …Run Code Online (Sandbox Code Playgroud) 我想在幻灯片中更改UISlider拇指图像.
基本上根据值设置thumbImage.

我们的想法是根据值旋转图像并将其设置为拇指.
所以我尝试通过覆盖来设置拇指图像
-(BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
[self setThumbImage:[self imageRotatedByDegrees:50] forState:UIControlStateHighlighted];
Run Code Online (Sandbox Code Playgroud)
当我向滑块添加动作时,我也尝试了同样的事情.不幸的是,在两种实现中,图像都消失了.
你觉得有可能以我的方式实现吗?如果没有,请解释并建议一种替代方式(希望不是一个可以自定义和替换整个滑块的方法)
如果是的话,我将非常感谢代码示例.
我在这里找到的答案越接近
非常感谢.
大家好,我的 iOS 应用需要帮助。如何在我点击的位置获取图像的背景颜色(我在 UIImageView 中插入)。我创建了一个点击手势识别器,但我不知道如何读取我点击的背景颜色。
ios ×6
uiimage ×4
objective-c ×3
swift ×2
bitmap ×1
cocoa ×1
cocoa-touch ×1
iphone ×1
performance ×1
pixels ×1
uiimageview ×1
uislider ×1
uitouch ×1