質問編集履歴
1
変数名の誤りなどの雑なコードを修正しました。申し訳ありません。
title
CHANGED
File without changes
|
body
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
```swift
|
7
7
|
//インスタンス変数
|
8
|
-
var myImageView =
|
8
|
+
var myImageView = UIImageView()
|
9
9
|
|
10
10
|
//xcode内に用意した.jpgファイルをimageViewとして表示。同時にimageViewにtapGestureを付与しました。
|
11
11
|
override func viewDidLoad() {
|
@@ -18,19 +18,22 @@
|
|
18
18
|
myImageView.frame.size = image!.size
|
19
19
|
|
20
20
|
myImageView.userInteractionEnabled = true
|
21
|
-
|
21
|
+
myImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "tapAction:"))
|
22
|
+
|
23
|
+
self.view.addSubview(myImageView)
|
22
24
|
}
|
23
25
|
|
24
26
|
//imageViewのタップ時にタップした座標のRGB値を表示する
|
25
27
|
func tapAction(sender:UITapGestureRecognizer){
|
26
28
|
//タップした座標の取得
|
27
|
-
let tapPoint = sender.locationInView(self.myImageView)
|
29
|
+
let tapPoint = sender.locationInView(self.myImageView)
|
28
|
-
//imageをdata化
|
30
|
+
//imageをdata化
|
29
|
-
let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(
|
31
|
+
let pixelData = CGDataProviderCopyData(CGImageGetDataProvider(myImageView.image!.CGImage))
|
30
|
-
let data: UnsafePointer = CFDataGetBytePtr(pixelData)
|
32
|
+
let data: UnsafePointer = CFDataGetBytePtr(pixelData)
|
31
33
|
|
32
34
|
//タップした位置の座標にあたるアドレスを算出
|
33
|
-
let pixelAd: Int = ((Int(
|
35
|
+
let pixelAd: Int = ((Int(myImageView.image!.size.width) * Int(tapPoint.y)) + Int(tapPoint.x)) * 4
|
36
|
+
|
34
37
|
//それぞれRGBAの値をとる
|
35
38
|
let r = CGFloat(Int( CGFloat(data[pixelAd])/CGFloat(255.0)*100)) / 100
|
36
39
|
let g = CGFloat(Int( CGFloat(data[pixelAd+1])/CGFloat(255.0)*100)) / 100
|
@@ -46,18 +49,18 @@
|
|
46
49
|
|
47
50
|
```swift
|
48
51
|
//モノクロのフィルターを指定
|
49
|
-
|
52
|
+
let myFilter = CIFilter(name: "CIColorMonochrome")
|
50
|
-
|
53
|
+
myFilter!.setValue(CIImage(image: myImageView.image!), forKey: kCIInputImageKey)
|
51
|
-
//値の調整.
|
54
|
+
//値の調整.
|
52
|
-
|
55
|
+
myFilter!.setValue(CIColor(red: 0.5, green: 0.5, blue: 0.5), forKey: kCIInputColorKey)
|
53
|
-
|
56
|
+
myFilter!.setValue(1.0, forKey: kCIInputIntensityKey)
|
54
|
-
// フィルターを通した画像をアウトプット.
|
57
|
+
// フィルターを通した画像をアウトプット.
|
55
|
-
|
58
|
+
let myOutputImage : CIImage = myFilter!.outputImage!
|
56
|
-
|
59
|
+
let context = CIContext(options: nil)
|
57
|
-
|
60
|
+
let cgImage = context.createCGImage(myOutputImage, fromRect: myOutputImage.extent)
|
58
|
-
|
61
|
+
let newImage = UIImage(CGImage: cgImage)
|
59
|
-
// 再びUIViewにセット.
|
62
|
+
// 再びUIViewにセット.
|
60
|
-
|
63
|
+
self.myImageView.image = newImage
|
61
64
|
```
|
62
65
|
このようにして上記と同様にtapActionを行っても、タップしたポイントとは異なるポイントのRGB値を表示します。
|
63
66
|
フィルターをかけたimageのタップした座標の正しいRGB値の取り方をご教授いただければと思います。
|
@@ -67,4 +70,6 @@
|
|
67
70
|
このようなこともあり混乱しています。
|
68
71
|
|
69
72
|
どなたかお知恵を拝借できれば幸いです。
|
70
|
-
長文失礼しました。
|
73
|
+
長文失礼しました。
|
74
|
+
|
75
|
+
雑なコードで申し訳ございませんでした。修正しました。
|