C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

カラー変数を6桁の16進数に変換する方法

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■90295 / inTopicNo.1)  カラー変数を6桁の16進数に変換する方法
  
□投稿者/ SSS (1回)-(2019/02/23(Sat) 12:41:44)

分類:[.NET 全般] 


Dim Color0 As Color = Color.FromArgb(CInt(frm.NumericUpDown1.Value), CInt(frm.NumericUpDown2.Value), CInt(frm.NumericUpDown3.Value))


で定義されたカラー変数を6桁の16進数に変換したいのですが、

Dim CL as String = Color0.R.ToString("X2") & Color0.G.ToString("X2") & Color0.B.ToString("X2")


というようにするしかないですか?
もっと簡単にできる方法があれば教えてください。




引用返信 編集キー/
■90296 / inTopicNo.2)  Re[1]: カラー変数を6桁の16進数に変換する方法
□投稿者/ 魔界の仮面弁士 (2074回)-(2019/02/23(Sat) 13:39:46)
No90295 (SSS さん) に返信
> Dim Color0 As Color = Color.FromArgb(CInt(frm.NumericUpDown1.Value), CInt(frm.NumericUpDown2.Value), CInt(frm.NumericUpDown3.Value))
この方法だと、システムカラー(SystemColors.WindowText 等)は作れませんが、それは良いのでしょうか。
システムカラーやアルファ値も含めて正確に文字列化したいなら、
ColorConverter クラスの ConvertToInvariantString / ConvertFromInvariantString メソッドを使えます。


> で定義されたカラー変数を6桁の16進数に変換したいのですが、
RGB 順なら、ColorTranslator.ToWin32 とか。


Public Class Form1
 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  PropertyGrid1.PropertySort = PropertySort.Alphabetical
  PropertyGrid1.SelectedObject = Label1
 End Sub

 Private Sub Label1_BackColorChanged(sender As Object, e As EventArgs) Handles Label1.BackColorChanged
  'Label2.Text = ColorTranslator.ToHtml(Label1.BackColor)
  'Label3.Text = ColorTranslator.ToOle(Label1.BackColor).ToString("X8")
  Label4.Text = ColorTranslator.ToWin32(Label1.BackColor).ToString("X6")
 End Sub
End Class

引用返信 編集キー/
■90297 / inTopicNo.3)  Re[2]: カラー変数を6桁の16進数に変換する方法
□投稿者/ SSS (3回)-(2019/02/23(Sat) 13:55:28)
ありがとうございます。

試してみたのですが、
  Label4.Text = ColorTranslator.ToWin32(Label1.BackColor).ToString("X6")
これだと、
BGR
という順番になってしまうのですが。
 'Label2.Text = ColorTranslator.ToHtml(Label1.BackColor)

だと
RGBという順番になりますが、
文字列の先頭に#が入ってしまいます。

あと、システムカラーを作る必要はありません。

引用返信 編集キー/
■90298 / inTopicNo.4)  Re[3]: カラー変数を6桁の16進数に変換する方法
□投稿者/ 魔界の仮面弁士 (2075回)-(2019/02/23(Sat) 14:07:18)
2019/02/23(Sat) 14:37:01 編集(投稿者)

No90297 (SSS さん) に返信
> BGR
> という順番になってしまうのですが。

入れ替えるのを忘れてました。こうですかね。

Label5.Text = IPAddress.HostToNetworkOrder(ColorTranslator.ToWin32(Label1.BackColor)).ToString("X8").Substring(0, 6)


かえって面倒ですね。あとはこうかな。

Label6.Text = Color.FromArgb(0, Label1.BackColor).ToArgb().ToString("X6")

Label7.Text = Label1.BackColor.ToArgb().ToString("X8").Substring(2)


いずれにせよ読みにくいので、Color 型に拡張メソッドを設けた方が良いかも。


>  'Label2.Text = ColorTranslator.ToHtml(Label1.BackColor)
> RGBという順番になりますが、
> 文字列の先頭に#が入ってしまいます。
HTML や CSS 等で使われる表現なので、"red" 等の文字列になることもありますね。
引用返信 編集キー/
■90300 / inTopicNo.5)  Re[4]: カラー変数を6桁の16進数に変換する方法
□投稿者/ SSS (5回)-(2019/02/23(Sat) 18:18:22)
シンプルな方法はないのですね。
どうもありがとうございました!!!
解決済み
引用返信 編集キー/
■90322 / inTopicNo.6)  Re[5]: カラー変数を6桁の16進数に変換する方法
□投稿者/ shu (1166回)-(2019/02/26(Tue) 11:58:00)
No90300 (SSS さん) に返信
> シンプルな方法はないのですね。
> どうもありがとうございました!!!

あまり変わらないかもしれませんが
Dim CL = ""
With Color0
  CL = $"{ .R:X2}{ .G:X2}{ .B:X2}"
End With

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ