0%

直视自己的心灵,叩问自身,我承认我是凡人,从此梦境破碎,人间的痛苦和烦扰围绕,沉重而真实,生命开始有了重量。

山月记:心狂化虎

我深怕自己本非美玉,故而不敢加以刻苦琢磨,却又半信自己是块美玉,故又不肯庸庸碌碌,与瓦砾为伍。于是我渐渐地脱离凡尘,疏远世人,结果便是一任愤懑与羞恨日益助长内心那怯弱的自尊心。其实,任何人都是驯兽师,而那野兽,无非就是各人的性情而已。于我而言,这种妄自尊大的羞耻心就是野兽,就是猛虎。

Read more »

太宰治:诉诸于人――对这一手段我不怀有任何期待。不管诉诸给谁,恐怕终归不过是被精于世故之人口中那世间常理所反复劝说而已。

鲁迅:楼下一个男人病得要死,那间隔壁的一家唱着留声机,对面是弄孩子,楼上有两人狂笑;还有打牌声,河中的船上有女人哭着她死去的母亲,人类的悲欢并不相通,我只觉得他们吵闹。

Read more »

key:哲学、生活、荒诞、抗争、幸福

真正严肃的哲学问题只有一个,那便是自杀。判断人生值不值得活,等于回答哲学的根本问题。

荒谬:当人对世界的理性和幸福的热望,却碰到了这个非人的毫无意义杂乱无章的世界,荒谬就产生了。”人性总在呼唤着,而世界却总在不合理地静默着”。

Read more »

其实,不是中国能否和平崛起的问题,而是西方(主要是美国)能否接受中国和平崛起的问题,或西方基督教世界能否接受世俗文明崛起的问题。

国际体系的三个特征一并导致了国家间的相互提防:

  1. 缺乏一个凌驾于国家之上并能保护彼此不受侵犯的中央权威;
  2. 国家总是具有用来进攻的军事能力;
  3. 国家永远无法得知其他国家的意图。有了这一担心——不可能完全一劳永逸地消除
    Read more »

人类与寄生物的生存在历史中不断出现,流行性病毒感染并不是现在社会出现的问题,它们一直都在,在罗马衰亡的背后,在蒙古征战的路上,在冒险者踏上美洲的船舶中,它们一直都在。

Read more »

音乐的美学本质

音乐怎么听?

艺术怎么懂?

视觉、文学、听觉,三大艺术,关键在于感知和共鸣,而不是能够用文字和数理去解释它。

音乐何需懂!

Read more »

什么是爱情?什么是婚姻?

《围城》 一直听说但确没读过,这次碰巧翻阅,发现文笔清淡有趣,完全没有想象中的沉重,对男女情爱、婚姻的描写真是精妙,在这里做下部分文摘。

Read more »

1. 什么是网络重定向 what

HTTP重定向(HTTP redirect)就是将各个网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向),也称为URL 重定向、 URL 转发;

常见的HTTP重定向状态码是301(Moved Permanently/永久移动)、302(Found/已定位),差别在于301表示已为目标资源分配了新的永久URI,以后对该资源的任何引用都应使用新的URI,302表示目标资源临时位于其他URI下。由于重定向有时可能会更改,因此客户端应继续将有效请求URI用于将来的请求。

Read more »


title: iOS 获取UIImage上某一点的颜色
date: 2018-06-07 18:12:21
tags: iOS
categories: IT


获取图片上某一点的颜色

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
- (UIColor *)colorAtPixel:(CGPoint)point {
if (!CGRectContainsPoint(CGRectMake(0.0f, 0.0f, self.size.width, self.size.height), point)) {
return nil;
}

UIColor* color = nil;

CGImageRef inImage = self.CGImage;

// Create off screen bitmap context to draw the image into. Format ARGB is 4 bytes for each pixel: Alpa, Red, Green, Blue
CGContextRef cgctx = [self createARGBBitmapContextFromImage:inImage];
if (cgctx == NULL) { return nil; /* error */ }

size_t cgimageWidth = CGImageGetWidth(inImage);
size_t cgimageHeight = CGImageGetHeight(inImage);
point = CGPointMake(point.x/self.size.width*cgimageWidth, point.y/self.size.width*cgimageHeight);
CGRect rect = {{0,0},{cgimageWidth,cgimageHeight}};


// Draw the image to the bitmap context. Once we draw, the memory
// allocated for the context for rendering will then contain the
// raw image data in the specified color space.
CGContextDrawImage(cgctx, rect, inImage);

// Now we can get a pointer to the image data associated with the bitmap
// context.
unsigned char* data = CGBitmapContextGetData (cgctx);
if (data != NULL) {
//offset locates the pixel in the data from x,y.
//4 for 4 bytes of data per pixel, w is width of one row of data.
int offset = 4*((cgimageWidth*round(point.y))+round(point.x));
CGFloat 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)];
}

// When finished, release the context
CGContextRelease(cgctx);
// Free image data memory for the context
if (data) { free(data); }

return color;
}


- (CGContextRef) createARGBBitmapContextFromImage:(CGImageRef)inImage
{
CGContextRef context = NULL;
CGColorSpaceRef colorSpace;
void * bitmapData;
int bitmapByteCount;
int bitmapBytesPerRow;

// Get image width, height. We'll use the entire image.
size_t pixelsWide = CGImageGetWidth(inImage);
size_t pixelsHigh = CGImageGetHeight(inImage);

// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (pixelsWide * 4);
bitmapByteCount = (bitmapBytesPerRow * pixelsHigh);

// Use the generic RGB color space.
colorSpace = CGColorSpaceCreateDeviceRGB();

if (colorSpace == NULL)
{
fprintf(stderr, "Error allocating color space\n");
return NULL;
}

// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
bitmapData = malloc( bitmapByteCount );
if (bitmapData == NULL)
{
fprintf (stderr, "Memory not allocated!");
CGColorSpaceRelease( colorSpace );
return NULL;
}

// Create the bitmap context. We want pre-multiplied ARGB, 8-bits
// per component. Regardless of what the source image format is
// (CMYK, Grayscale, and so on) it will be converted over to the format
// specified here by CGBitmapContextCreate.
context = CGBitmapContextCreate (bitmapData,
pixelsWide,
pixelsHigh,
8, // bits per component
bitmapBytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedFirst);
if (context == NULL)
{
free (bitmapData);
fprintf (stderr, "Context not created!");
}

// Make sure and release colorspace before returning
CGColorSpaceRelease( colorSpace );

return context;
}