LibreOffice5(80)Pythonでcom.sun.star.util.Colorの値をRGBや16進数に変換する方法

2017-09-03

旧ブログ

t f B! P L
TaskCreatorサービスをインスタンス化したフレーム付きウィンドウのコンテナウィンドウに載せるコントロールコンテナの背景色を決定するために他の色を調べました。com.sun.star.util.Colorのlong型を16進数やRGBにPythonで変換もしてみます。

前の関連記事: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]:
'0xdddddd'
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]:
[221, 221, 221]
今度は逆をたどります。
In [4]:
#rgb->hex
color_hex = "0x{}".format("".join(["{:02x}".format(i) for i in color_rgb]))
color_hex
Out[4]:
'0xdddddd'
In [5]:
# hex->long
color_long = int(color_hex, 16)
color_long
Out[5]:
14540253
残り2パターンの変換をします。
In [6]:
# long->rgb
color_rgb = [color_long//i%256 for i in (256**2, 256, 1)]
color_rgb
Out[6]:
[221, 221, 221]
In [7]:
# rgb->long
color_long =sum([i*j for i, j in zip(color_rgb, (256**2, 256, 1))])
color_long
Out[7]:
14540253
com.sun.star.util.Colorとして使えるのはlongとhexだけで、rgbは代入できません。

hexは大文字でも小文字でも使えました。

(2017.9.7追記。rgb->hexでRGB各要素を2桁に揃える処理を追加しました。)

参考にしたサイト


画像から色のRBGを取得するスポイトツール - PEKO STEP
アップロードした画像からRGBと16進数カラーコードが取得できます。

次の関連記事:LibreOffice5(81)Javaの例:GUIをPythonにする その7

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ