質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

427閲覧

Xamarin.iOSで指定座標のピクセルのRGBAを取得したい

yrema

総合スコア286

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/08/30 08:13

指定した座標の画素が取りたくて以下のようにしたのですが、
red, green, blue, alpha すべて0でしか取得できないのですが、何が悪いのでしょうか?

c#

1 UIImage icon = UIImage.FromBundle("xxxxxIcon"); 2 for (int x = 0; x < (int)icon.CGImage.Width; x++) 3 { 4 for (int y = 0; y < (int)icon.CGImage.Height; y++) 5 { 6 resultColor = GetColorFromImage(icon.CGImage, x, y); 7 } 8 }

C#

1 public static UIColor GetColorFromImage(CGImage image, int x, int y) 2 { 3 nint width = image.Width; 4 nint height = image.Height; 5 CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB(); 6 byte[] rawData = new byte[height * width * 4]; 7 nint bytesPerPixel = 4; 8 nint bytesPerRow = bytesPerPixel * width; 9 nint bitsPerComponent = 8; 10 CGContext context = new CGBitmapContext(null, width, height, bitsPerComponent, bytesPerRow, colorSpace, CGBitmapFlags.ByteOrder32Big | CGBitmapFlags.PremultipliedLast); 11 colorSpace.Dispose(); 12 13 context.DrawImage(new CGRect(0, 0, width, height), image); 14 context.Dispose(); 15 16 nint byteIndex = (bytesPerRow * y) + x * bytesPerPixel; 17 18 float alpha = rawData[byteIndex + 3]; 19 float red = rawData[byteIndex]; 20 float green = rawData[byteIndex + 1]; 21 float blue = rawData[byteIndex + 2]; 22 23 UIColor resultColor = new UIColor(red, green, blue, alpha); 24 Log.D("resultColor", resultColor); 25 26 return resultColor; 27 }

◆環境
Visual Studio 2019
Xamarin 16.1
Xamarin.iOS 12.10
実機iPadのiOS 12.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

CGBitmapContextrawDataを渡していないからだと思います。

c#

1CGContext context = new CGBitmapContext(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, CGBitmapFlags.ByteOrder32Big | CGBitmapFlags.PremultipliedLast);

投稿2019/08/30 14:34

f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yrema

2019/08/31 05:47

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問