吉田研一
App Inventor の色指定アルゴリズムを
理解し色指定しやすくしてみる
京都GTUG 2011年忘れ勉強会
2011/12/18 (日)
自己紹介
吉田研一 (44 years old)
奈良在住(来年中に姫路)
ECCコンピュータ専門学校(大阪)講師
JAG神戸 & GTUG神戸メンバー
近況 11/12 KOF
「勉強会&イベント
探訪記」より
App Inventor って?
前説
GUI プログラミング
ブロックを配置してプログラミング
ブラウザでレイアウト
コードレス code-less 開発環境
最近起動時にこんなダイアログが
なんスか?
今年いっぱいで終了orz
This serverって…
Google サーバ側でビルドしてた
誰でもAndroid開発できるApp Inventorの基礎知識(1/3) - @IT http://bit.ly/ur8mNa
オープンソース化に期待
MITに移管されます。2012年3月から。
その間は日本App Inventorユーザ会で
互助会的なサーバをたちあげる。準備中
で、Google Technologyじゃなくなっ
ちゃうけど。このLTはします。
本題
App Inventorの独自カラー指定
プリセット色は15色
それ以外の色は計算する
ひとつの例として、パープルの暗い影の R、
G 、B の値は、R = 160、G = 32、B = 240 で
す。Opacity を 255 にしてこれらの値にアルゴ
リズムを適用すると、−6283024 という値が得
られます。
4.2.7 カラーブロック - ソフトウェア技術ドキュメントを勝手に翻訳 http://bit.ly/sisAxa
こんな感じです。
ホントいわゆるMagic Number… (゚Д゚¦¦¦)
独自カラーアルゴリズム
App Inventor 用のカラー番号を得るには、以下のアルゴリ ズムに従って、4 つの数を組み合わせます。
1.Opacity からはじめる。
2.これを 256 倍して R を加える。 3.結果を 256 倍して G を加える。 4.結果を 256 倍して B を加える。
5.結果を取り出し 168 = 4294967296 を引く。
6.その結果の ( 負の ) 数が App Inventor で使用する値となる。
#AARRGGBB
形式らしい
Opacity=α 値
計算してみる(1)準備
Opacity を 255 = ( FF)
16R = 160 = (A0)
16G = 32 = (20)
16B = 240 = (F0)
16計算してみる(2)
1.Opacity からはじめる。
Opacity を 255 = ( FF)
162.これを 256 倍して R を加える。
R = 160 = (A0)
16これを 256 倍して
(FF)
16× (100)
16= (FF00)
16∵ 256 = (100)
16= 16 ^ 2 桁シフト
R を加える。
(FF00)
16+ ( A0)
16= (FF A0)
16計算してみる(3)
3.結果を 256 倍して G を加える。
G = 32 = (20)
16(FF A0)
16× (100)
16= (FF A000)
16(FF A000)
16+ ( 20)
16= (FF A020)
164.結果を 256 倍して B を加える。
B = 240 = (F0)
16(FF A020)
16× (100)
16= (FF A02000)
16(FF A02000) + ( F0) = (FF A020F0)
計算してみる(4)最後
5.結果を取り出し 168 = 4294967296 を引く。
16 8 = 4294967296 = (100000000)
16(FF A020F0)
16- (100000000)
16の計算は
FFA020F0
-) 100000000
FFFFFFFFFFA020F0
… になります。え (゚Д゚;)
桁借り(borrow)
65 ビット目の桁を借りて減算
10
100000000FFA020F0 10
-)0000000100000000 -) 1
FFFFFFFFFFA020F0 F
オーバーフロービット
One-Padding (1埋め)
5.結果を取り出し 168 = 4294967296 を引く。
(FF A002F0)
16- (100000000)
16= (FFFFFFFFFF A020F0)
16
#FFFFFFFF AARRGGBB 形式!
上位32ビットはAll 1ビットでPadding
2 の補数
6.その結果の ( 負の ) 数が App Inventor で使用する値となる。
(FFFFFFFFFF A020F0)
16最上位ビット(64ビット)が1のためsigned longの場合2の補 数(反転して1を加算)をとれば、数値が取り出せる