`
jsntghf
  • 浏览: 2531743 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

取色功能的实现

    博客分类:
  • iOS
阅读更多

核心代码如下,具体功能请参考附件。

 

- (UIColor *) getPixelColorAtLocation:(CGPoint)point {
	UIColor *color = nil;
	CGImageRef inImage = self.image.CGImage;
	CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
	if (cgctx == NULL) { return nil; }
	
    size_t w = CGImageGetWidth(inImage);
	size_t h = CGImageGetHeight(inImage);
	CGRect rect = {{0, 0}, {w, h}}; 
    
	CGContextDrawImage(cgctx, rect, inImage); 
	
	unsigned char *data = CGBitmapContextGetData(cgctx);
	if (data != NULL) {
		int offset = 4 * ((w * round(point.y)) + round(point.x));
		int alpha = data[offset]; 
		int red = data[offset + 1]; 
		int green = data[offset + 2]; 
		int blue = data[offset + 3]; 
		color = [UIColor colorWithRed:(red / 255.0f) green:(green / 255.0f) blue:(blue / 255.0f) alpha:(alpha / 255.0f)];
	}
	
	CGContextRelease(cgctx); 
    
	if (data) { free(data); }
	
	return color;
}

- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef) inImage {	
	CGContextRef context = NULL;
	CGColorSpaceRef colorSpace;
	void *bitmapData;
	int bitmapByteCount;
	int bitmapBytesPerRow;
    
	size_t pixelsWide = CGImageGetWidth(inImage);
	size_t pixelsHigh = CGImageGetHeight(inImage);
    
	bitmapBytesPerRow = (pixelsWide * 4);
	bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);
    
	colorSpace = CGColorSpaceCreateDeviceRGB();
    
	if (colorSpace == NULL) {
		fprintf(stderr, "Error allocating color space\n");
		return NULL;
	}
    
	bitmapData = malloc(bitmapByteCount);
	if (bitmapData == NULL) {
		fprintf(stderr, "Memory not allocated!");
		CGColorSpaceRelease(colorSpace);
		return NULL;
	}
	
	context = CGBitmapContextCreate(bitmapData, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow,
                                    colorSpace, kCGImageAlphaPremultipliedFirst);
	if (context == NULL) {
		free(bitmapData);
		fprintf(stderr, "Context not created!");
	}
	
	CGColorSpaceRelease(colorSpace);
	
	return context;
}

 

示例图:

分享到:
评论

相关推荐

    android 吸管取色功能

    - 文件名"MyColorDisk"可能指的是一个示例项目或库,它可能包含了一个完整的吸管取色功能实现。通过查看其源代码,开发者可以学习到具体实现细节,包括如何集成到自己的项目中。 总之,实现"android 吸管取色功能...

    屏幕取色工具源代码!!!!!!!!!!!!!

    屏幕取色工具是IT行业中常见的辅助软件,尤其对于设计师、程序员和美工人员来说,它能帮助用户...通过对ColorPad的源代码学习,不仅可以掌握基本的屏幕取色功能实现,还能了解到Windows程序设计中的其他关键知识点。

    利用脚本按键精灵实现后台窗口取色

    本文将详细介绍如何利用脚本按键精灵(一种自动化软件)来实现后台窗口的取色功能。 #### 一、基本概念介绍 1. **按键精灵**:是一种能够模拟人类操作的自动化工具,通过编写脚本来模拟键盘和鼠标动作,广泛应用于...

    类似photoshop取色功能的取色器

    "类似Photoshop取色功能的取色器"就是这样一个专为颜色选取而设计的工具,它模仿了Adobe Photoshop中的颜色选择功能,帮助用户获取屏幕上的任意颜色代码,以便在自己的项目中使用。 Photoshop作为一款专业的图像...

    屏幕取色.zip易语言项目例子源码下载

    这个"屏幕取色.zip"压缩包包含了一个易语言的项目实例和源代码,是学习易语言编程和理解屏幕取色功能实现的好材料。 首先,我们来深入了解易语言。易语言的设计理念是使编程变得简单,它的语法结构简洁明了,基本...

    网页版鼠标取色的实现

    网页版鼠标取色的实现是一种常见的前端开发技术,它允许用户在网页上通过鼠标点击选取颜色,然后获取该颜色的RGB、HEX等值。...以上就是实现网页版鼠标取色功能的主要技术和步骤,希望对您有所帮助。

    java实现屏幕取色

    5. **优化与注意事项**:虽然上述代码实现了基本的屏幕取色功能,但在实际应用中可能需要考虑一些优化。例如,可以增加颜色选择的历史记录,或者提供一个颜色拾取工具栏来方便用户选取和比较颜色。同时,对于多...

    取色器(非常实用的取色软件)

    除了基本的取色功能,“取色器”可能还包含其他附加特性,例如历史记录功能,可以保存最近选取的颜色,便于回顾和再次使用;调色板功能,允许用户自定义或预览颜色组合;以及可能的屏幕放大镜功能,帮助用户在像素...

    FSC 取色工具

    它是整个工具的核心,包含了取色、截图以及其他辅助功能的实现。 FSCrossHair.exe 文件可能是一个十字准线工具,用于辅助精准定位取色位置。这个功能对于需要精确到像素级别的颜色选取来说尤其重要。 FSLogo.png ...

    vc.rar_VC 鼠标_mfc 鼠标取色_取颜色

    5. **取色功能实现** 使用`GetPixel()`函数可以从指定设备上下文(DC)中获取指定位置的像素颜色。在MFC中,我们可以通过`CWnd::GetDC()`获取窗口的设备上下文,然后调用`GetPixel()`获取鼠标位置的RGB颜色值。 6....

    屏幕取色程序及源代码

    在这个屏幕取色程序中,开发者可能使用了Windows API来实现屏幕捕获功能。Windows API提供了丰富的函数和结构,用于与操作系统进行交互,包括访问屏幕内容。例如,`GetDC`函数可以获取设备上下文(Device Context)...

    取色器 网页版 直接取色 选择取色 直接显示

    直接取色功能是指用户可以点击网页上的任何地方,取色器会即时显示出所选颜色的代码。这种实时反馈的能力使得用户在设计过程中能快速准确地选取所需颜色。通常,网页版取色器会提供一个浮动的面板,用户可以通过拖动...

    屏幕取色器

    屏幕取色器的核心功能是能够从屏幕上任何位置捕获颜色值。它支持多种颜色表示方式,包括十六进制(Hex)、RGB(红绿蓝)和HSV(色相、饱和度、亮度)。这些不同的颜色模式在不同场景下有着各自的适用性,例如,十六...

    Java实现屏幕取色

    本文将详细介绍如何通过Java语言实现屏幕取色功能,并提供两个示例代码进行说明。 #### 二、屏幕取色原理 屏幕取色的基本原理是通过`Robot`类获取屏幕上的像素值。`Robot`类提供了操作屏幕的方法,包括获取指定...

    网页取色器——C语言写的网页颜色获取工具

    此外,热键设置也是常见功能,允许用户快速启动取色功能。 在实际应用中,网页取色器可以帮助开发者在设计网页或应用时精确匹配颜色,或者帮助测试人员检查页面元素的颜色是否符合预期。例如,当需要确保不同设备上...

    颜色取色器好用的取色器

    本文将详细介绍颜色取色器的功能、工作原理及其在不同场景下的应用。 颜色取色器能够从屏幕上的任意位置获取颜色的数值,通常显示为RGB(红绿蓝)三原色的组合、十六进制代码、CMYK(青品黄黑)印刷色彩模式或其他...

    屏幕取色软件 放大 调色 功能

    首先,我们来看“取色”功能。屏幕取色允许用户通过鼠标点击或框选屏幕上的任何区域,获取该区域的颜色值。通常,这些颜色值会以不同的格式显示,如RGB(红绿蓝)、HEX(十六进制)或者HSB(色相、饱和度、亮度)。...

    js上传图片取色器插件.zip

    总结,js上传图片取色器插件利用JavaScript的FileReader API、Canvas API以及事件监听等技术,实现了用户友好的图片取色功能。在设计和实现时,不仅需要关注功能实现,还要注意性能、兼容性以及用户隐私等问题。通过...

    简易mfc取色器

    在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)构建一个简易的取色器应用,该应用基于API函数实现类似QQ截图和Photoshop的取色功能。首先,我们来了解一下MFC。 MFC是微软提供的一套C++类库...

    android 吸管取色功能.zip

    - 这个`android 吸管取色功能`项目源码可能包含了一个完整的Activity或者Fragment,实现了上述功能,你可以参考其布局文件(`.xml`)、Java或Kotlin类文件,以及可能存在的颜色处理工具类。 - 学习源码时,注意...

Global site tag (gtag.js) - Google Analytics