teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/09/13 01:02

投稿

takabosoft
takabosoft

スコア8356

answer CHANGED
@@ -4,4 +4,36 @@
4
4
 
5
5
  > let result_pix = RBGImage(data: katati_pixels, width: imageResize.cgImage!.width, height: imageResize.cgImage!.height)
6
6
 
7
- にすれば動くかもしれません。
7
+ ~~にすれば動くかもしれません。~~
8
+
9
+ ----
10
+ 追記:
11
+
12
+ 手元で再現しました。
13
+
14
+ 配列からCGImageを作るときのbytesPerRowの値が元のCGImageと一致しないので、そこが原因だとは思いますが、
15
+ 正しい計算式がちょっと調べた程度では出てこなかったので、こんな感じでごまかしました。
16
+
17
+ ```swift
18
+ func RBGImage(data: [UInt8], compatible: CGImage) -> CGImage? {
19
+ let providerRef = CGDataProvider(data: NSData(bytes: data, length: data.count))
20
+ let cgimage = CGImage(
21
+ width: compatible.width,
22
+ height: compatible.height,
23
+ bitsPerComponent: compatible.bitsPerComponent,
24
+ bitsPerPixel: compatible.bitsPerPixel,
25
+ bytesPerRow: compatible.bytesPerRow,
26
+ space: compatible.colorSpace!,
27
+ bitmapInfo: compatible.bitmapInfo,
28
+ provider: providerRef!,
29
+ decode: nil,
30
+ shouldInterpolate: false,
31
+ intent: .defaultIntent
32
+ )
33
+ return cgimage
34
+ }
35
+ ```
36
+
37
+ 呼び出し方は
38
+ `let result_pix = RBGImage(data: katati_pixels, compatible: imageResize.cgImage!)`
39
+ でOKです。