1. ホーム
  2. android

[解決済み] RGB値からカラーホイール座標への変換

2022-03-06 11:27:44

質問

Googleからカラーホイールの画像を入手して、カラーホイール内の任意のrgb色のxおよびy座標を計算する方法を見つけたいのですが。 もしこれが少しわかりにくかったら、もう少しうまく説明するつもりです。 カラーホイールの絵があります。paint.netで色を選択するときに使うようなものです。また、rgb値という形で色も持っています。今、私はちょうどその色を持つ画像のXとY座標を取得したい。 しかし、どのようにしてそれを行うことができるのか見当もつきません。私はこれをMIT App Inventor 2で作成したアプリで使おうとしていますが、私の能力は少し制限されます。ですから、一番良いのは数学的な解決策だけでしょう。 この件で誰かが私を助けてくれることを願っています。
編集部:では、私が使っている画像はこちらです。本当はずっとこれを入れておきたかったのですが、忘れてしまいました...。

解決方法は?

iOSアプリにカラーピッカーを実装しようと実験していたところ CIFilterを使用した で、同じ問題を解決する必要がありました。

ある色のHSV値が、そのカラーホイールにきれいにマッピングされることを発見しました。

  • hue は車輪の周りの角度です。0または1は0または2πラジアン、0.75はπ/2、0.5はπ、などです。基本的には右端から時計回りに円を一周して1から0になります。
  • saturation は、円の中心から端までの距離を、半径に対するパーセンテージで表したものです。真ん中が0、端が1です。
  • value は色の濃さ ( inputValue をご覧ください)。

ということで、与えられた huesaturation を指定した場合、このpsuedocodeを参照してください。

float pickerWidth = myPickerImage.size.width;
float radius = pickerWidth / 2;
float colorRadius = saturation * radius;
float angle = (1 - hue) * (2 * pi);
float midX = myPicker.size.width / 2; //midpoint of the circle
float midY = myPicker.size.height / 2;
float xOffset = cos(angle) * colorRadius; //offset from the midpoint of the circle
float yOffset = sin(angle) * colorRadius;
Point colorPoint = new Point(midX + xOffset, midY + yOffset);

value パラメータは、暗転スライダーを実装するために使用されます。

RGBをHSVに変換する必要があります -。 UIColor が自動的にやってくれますが、きっとAndroidでもできる方法があるはずです。