前の関連記事:LibreOffice5(79)ダイアログとコントロールコンテナの背景色
メニューバーなどの背景色を調べる
前回と同様に画像から色のRBGを取得するスポイトツール - PEKO STEPを使って調べました。
いずれもLibreOffice 5.2です。
linuxBean
スタートセンターのメニューバーの背景色 #E7E6E5 rgb(231,230,229)
スタートセンターの背景色 #DDDDDD rgb(221,221,221)
Writerドキュメントのメニューバーの背景色 #FEFEFE rgb(254,254,254)
Writerドキュメントのツールバーの背景色 #FAFAFA rgb(255,255,255)
Windows10
メニューバーの背景色 #F3F3F3 rgb(243,243,243)
スタートセンターの背景色 #DDDDDD rgb(221,221,221)
Calcドキュメントのメニューバーの背景色 #E9E7E6 rgb(233,231,230)
Calcドキュメントのツールバーの背景色 #E9E7E6 rgb(233,231,230)
(ツールバーによって違う。グラデュエーションあり。)
LibreOffice5(79)ダイアログとコントロールコンテナの背景色で調べたダイアログの背景色と比べても、linuxBeanとWindows10で同じなのはスタートセンターの背景色だけです。
スタートセンターの背景色はxcdファイルで定義されているのに対して、他の色はウィンドウマネージャーやデスクトップ環境に依存しているのが原因のようです。
スタートセンターの背景色の設定されているのxcdファイルのノードはPython(26)XPathでxmlの子要素からルートまで遡る方法で調べました。
スタートセンターの背景色の値は14540253になっています。
結局コントロールコンテナの背景色はWindows10のウィンドウの背景色に使われていた0xF0F0F0を使うことにしました。
この値はcom.sun.star.util.Colorでlong型になっています。
com.sun.star.util.Colorを16進数やRGBに変換する
com.sun.star.util.Colorの14540253をPythonで16進数やRGBに変換します。
In [1]:
# long
color_long = 14540253
このcom.sun.star.util.Colorのlong型を16進数に変換するにはhex()関数を使います。
In [2]:
# long->hex
color_hex = hex(color_long)
color_hex
Out[2]:
16進数をRGBに変換するには16進数を2桁ずつ取り出して10進数にしてR,G,Bにあてがうだけです。
In [3]:
# hex->rgb
color_rgb = [int(color_hex[i:i+2], 16) for i in range(2, 8, 2)]
color_rgb
Out[3]:
今度は逆をたどります。
In [4]:
#rgb->hex
color_hex = "0x{}".format("".join(["{:02x}".format(i) for i in color_rgb]))
color_hex
Out[4]:
In [5]:
# hex->long
color_long = int(color_hex, 16)
color_long
Out[5]:
残り2パターンの変換をします。
In [6]:
# long->rgb
color_rgb = [color_long//i%256 for i in (256**2, 256, 1)]
color_rgb
Out[6]:
In [7]:
# rgb->long
color_long =sum([i*j for i, j in zip(color_rgb, (256**2, 256, 1))])
color_long
Out[7]:
com.sun.star.util.Colorとして使えるのはlongとhexだけで、rgbは代入できません。
hexは大文字でも小文字でも使えました。
(2017.9.7追記。rgb->hexでRGB各要素を2桁に揃える処理を追加しました。)
参考にしたサイト
画像から色のRBGを取得するスポイトツール - PEKO STEP
アップロードした画像からRGBと16進数カラーコードが取得できます。
0 件のコメント:
コメントを投稿