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

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

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

Re[3]: カラー型のデータをストリングに変換する方法


(過去ログ 103 を表示中)

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

■61766 / inTopicNo.1)  カラー型のデータをストリングに変換する方法
  
□投稿者/ 佐藤 正弘 (1回)-(2011/09/03(Sat) 13:33:17)

分類:[VB.NET/VB2005 以降] 

visual basic 2010にて、Getpixelより得られたカラー型のデータをString型に変換する方法が分りません。ご存知の方は、お教えください。

引用返信 編集キー/
■61767 / inTopicNo.2)  Re[1]: カラー型のデータをストリングに変換する方法
□投稿者/ Azulean (835回)-(2011/09/03(Sat) 14:56:04)
まずはどんな文字列を期待しているのか例示してください。

# 単に ToString() するだけでは足りないのであればなおのこと、何を望んでいるか明らかにすべき。
引用返信 編集キー/
■61771 / inTopicNo.3)  Re[1]: カラー型のデータをストリングに変換する方法
□投稿者/ 魔界の仮面弁士 (2345回)-(2011/09/03(Sat) 23:50:08)
No61766 (佐藤 正弘 さん) に返信
> visual basic 2010にて、Getpixelより得られたカラー型のデータをString型に変換する方法が分りません。ご存知の方は、お教えください。

GetPixel API の事を指しているのか、Bitmap.GetPixel メソッドの事を指しているのかで答えも変わってきます。

とりあえず、別所で似たような質問があったので参考までに紹介しておきます。
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10413

引用返信 編集キー/
■61775 / inTopicNo.4)  Re[2]: カラー型のデータをストリングに変換する方法
□投稿者/ 佐藤 正弘 (2回)-(2011/09/05(Mon) 14:25:29)
No61771 (魔界の仮面弁士 さん) に返信
> ■No61766 (佐藤 正弘 さん) に返信
>>visual basic 2010にて、Getpixelより得られたカラー型のデータをString型に変換する方法が分りません。ご存知の方は、お教えください。
>
> GetPixel API の事を指しているのか、Bitmap.GetPixel メソッドの事を指しているのかで答えも変わってきます。
>
> とりあえず、別所で似たような質問があったので参考までに紹介しておきます。
> http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=10413
>
ColorCnverterクラスのConvertToStringを利用する方法は、ストリングにはなりますが、RGBの3このデータをコンマで結合したものでした。
  ColorのToStringを利用する方法はやはり、R=  ,G=  、B=  と、3個の数字が並んでいたものでした。
  一つの数字で表現できる方法はないのでしょうか?

引用返信 編集キー/
■61777 / inTopicNo.5)  Re[3]: カラー型のデータをストリングに変換する方法
□投稿者/ ダッチ (1回)-(2011/09/05(Mon) 14:35:27)
佐藤 正弘 さん、こんにちはダッチです。

Color.ToArgb メソッドはどうでしょうか。
文字列から Color に戻すには Color.FromArgb メソッド で、できますし。

文字列にして何がしたいのかがわからないため、
そこを説明された方が的確な回答を得られると思いますよ。
引用返信 編集キー/
■61778 / inTopicNo.6)  Re[3]: カラー型のデータをストリングに変換する方法
□投稿者/ shu (971回)-(2011/09/05(Mon) 14:39:10)
No61775 (佐藤 正弘 さん) に返信

> ColorCnverterクラスのConvertToStringを利用する方法は、ストリングにはなりますが、RGBの3このデータをコンマで結合したものでした。
>   ColorのToStringを利用する方法はやはり、R=  ,G=  、B=  と、3個の数字が並んでいたものでした。
>   一つの数字で表現できる方法はないのでしょうか?

ToArgbを使用すると
AARRGGBB (8ビット単位でA, R, G, Bの値が格納される)
の形式で1つの数値化された値が返ってきます。この順番で都合がわるければR,G,Bの値から計算するとよいかと思います。

引用返信 編集キー/
■61782 / inTopicNo.7)  Re[3]: カラー型のデータをストリングに変換する方法
□投稿者/ ズビズバ (2回)-(2011/09/05(Mon) 15:08:48)
No61775 (佐藤 正弘 さん) に返信

質問に対する最初のレスに

> まずはどんな文字列を期待しているのか例示してください。

とあるのに、どうしてこれが答えられないのでしょう?
本当に問題を解決したいと思っているのでしょうか?
それさえ示せば、すぐに回答をもらえますよ。
引用返信 編集キー/
■61784 / inTopicNo.8)  Re[3]: カラー型のデータをストリングに変換する方法
□投稿者/ 魔界の仮面弁士 (2346回)-(2011/09/05(Mon) 15:41:42)
No61775 (佐藤 正弘 さん) に返信
この掲示板には、
 『半角カナは使用しないでください。文字化けの原因になります。』
というルールがあります。投稿欄の近くに書いてありますので、確認しておいてください。

>>> visual basic 2010にて、Getpixelより得られたカラー型のデータをString型に変換する方法が分りません。
どのように変換したいのか、最初に具体的に書いておかないと、質問と回答を繰り返すことになってしまいますよ。
GetPixelというのが何のことで、どのような色をどんな形式の文字列にしたいのか。


> ColorCnverterクラスの
「ColorConverterクラス」ですね。
代わりに、Color 構造体の Name プロパティと FromName メソッドを使う事も出来ます。


> ConvertToStringを利用する方法は、ストリンク゛にはなりますが、
> RGBの3このテ゛ータをコンマで結合したものでした。
そうとは限りません。

ConvertToInvariantString メソッドや ConvertToString メソッドは、
ARGB 4 データになることもあれば、カンマの無い文字列にもなりえます。

例えば、透明度を持つ色「Color.FromArgb(1, 2, 3, 4)」を変換した結果は
"1, 2, 3, 4" という Alpha, Red, Green, Blue な文字列になりますし、
「Color.Red」を変換した結果は "255, 0, 0" ではなく "Red" になります。
また、「SystemColors.Desktop」を変換した結果は "Desktop" です。

すべて数値で表記されないのは、それが必要なケースがあるためです。
特にシステムカラーについては、Color.ToArgb / FromArgb で変換してしまうと、
元の色を正しく表せなくなってしまいます。

>   ColorのToStringを利用する方法はやはり、R=  ,G=  、B=  と、3個の数字が並んでいたものでした。
最初の質問では、その形式では都合が悪いという事は記載されていませんでしたので、
文字列化でき、かつ、Color へ復元可能な方法のひとつとして紹介したまでです。


>   一つの数字で表現できる方法はないのでしょうか?
透明度を無視しても良いのであれば、
 s = ColorTranslator.ToOle( Color構造体 ).ToString("d") 'Color → 10進数表記
 s = ColorTranslator.ToOle( Color構造体 ).ToString("x") 'Color → 16進数表記
 s = ColorTranslator.ToOle( Color構造体 ).ToString("x8") 'Color → 16進数固定桁表記
という手があります。

逆に、復元するときは、
 c = ColorTranslator.FromOle( Convert.ToInt32( 文字列 , 10) ) '10進数表記 → Color
 c = ColorTranslator.FromOle( Convert.ToInt32( 文字列 , 16) ) '16進数表記 → Color
です。

OLE カラー表記は透明度を保持できませんが、システムカラーも正しく保持できます。
逆に、システムカラーは不要で透明度が必要なら、ToArgb / FromArgb で良いでしょう。
引用返信 編集キー/
■61785 / inTopicNo.9)  Re[4]: カラー型のデータをストリングに変換する方法
□投稿者/ 佐藤 正弘 (3回)-(2011/09/05(Mon) 15:48:42)
No61782 (ズビズバ さん) に返信
> ■No61775 (佐藤 正弘 さん) に返信
>
> 質問に対する最初のレスに
>
>>まずはどんな文字列を期待しているのか例示してください。
>
> とあるのに、どうしてこれが答えられないのでしょう?
> 本当に問題を解決したいと思っているのでしょうか?
> それさえ示せば、すぐに回答をもらえますよ。

vb5no
  vb5で使ったQBColorの例えば、黒の場合は 0、青の場合は8388608、緑の場合は32768、シアンの場合は8921376、赤の場合は128という具合の文字列を想定
  していたものですから。

引用返信 編集キー/
■61790 / inTopicNo.10)  Re[5]: カラー型のデータをストリングに変換する方法
□投稿者/ 魔界の仮面弁士 (2348回)-(2011/09/05(Mon) 22:03:53)
No61785 (佐藤 正弘 さん) に返信
> vb5no

VB5 の色は OLE カラーとも呼ばれるもので、16進数値では &H00BBGGRR で表されます。
また、OLE カラーは &H80000000〜&H80000018 の範囲を取ることもあり、これはシステムカラーを意味します。

たとえば VB5 では、vbBlack は &H00000000 になりますし、vbDesktop は &H80000001 です。

>   vb5で使ったQBColorの例えば、黒の場合は 0、

VB5 の vbBlack は数値としては &H0 で表されましたが、.NET の Color.Black は
&HFF000000 になります。この場合の先頭 FF は Alpha 値であり、完全不透明を意味します。

VB5 の色は BGR 順の &H00BBGGRR (または &H800000xx )の形式でしたが、
.NET の ARGB 表現では RGB 順の &HAARRGGBB であることに注意が必要です。


> 青の場合は8388608、緑の場合は32768、シアンの場合は8921376、赤の場合は128という具合の文字列を想定
> していたものですから。

VB5 の QBColor 関数も VB2010 の QBColor メソッドも、戻り値はいずれも
「32bit 整数型」であって、「文字列型」では無いことに注意してください。

・VB5 の VBA.Information.QBColor は、As Long(あるいは As OLE_COLOR)。
・VB2010 の Microsoft.VisualBasic.Information.QBColor は As Integer(あるいは As Int32)。


単純に Integer から String にするという場合においても、10進数だったり 16進数だったり、
先頭ゼロ埋めだったりと、いろいろな形式があります。端折らずにきちんと説明しましょう。


なお、QBColor メソッドの戻り値である整数を Color 構造体に変換する場合は、
先述した ColorTranslator.FromOle メソッドを使えば OK です。たとえば
QBColor(0) は &H0(0)、QBColor(1) は &H800000(8388608)、QBColor(2) は &H8000(32768) ですが、

 Dim c0 As Color = ColorTranslator.FromOle(QBColor(0))
 Dim c1 As Color = ColorTranslator.FromOle(QBColor(1))
 Dim c2 As Color = ColorTranslator.FromOle(QBColor(2))

とした場合、c0 は Black、c1 は Navy、c2 は Green に変換されます。
(QBColor 以外の色についても、同様に変換できます)


逆に、Navy な色を
> 青の場合は8388608
に戻したい場合には、
 Dim i As Integer = ColorTranslator.ToOle(c1)
のようになります。あるいは、ARGB 値から BGR 値に変換するために
 Dim j As Integer = c1.B * &H10000 + c1.G * &H100 + c1.R
のようにすることもできますし、16進数文字列がお望みなら
 Dim s As String = String.Format("{2:X2}{1:X2}{0:X2}", c1.R, c1.G, c1.B)
と記述できます。
引用返信 編集キー/
■61802 / inTopicNo.11)  Re[6]: カラー型のデータをストリングに変換する方法
□投稿者/ 佐藤 正弘 (4回)-(2011/09/06(Tue) 14:25:45)
No61790 (魔界の仮面弁士 さん) に返信
> ■No61785 (佐藤 正弘 さん) に返信
>> vb5no
>
> VB5 の色は OLE カラーとも呼ばれるもので、16進数値では &H00BBGGRR で表されます。
> また、OLE カラーは &H80000000〜&H80000018 の範囲を取ることもあり、これはシステムカラーを意味します。
>
> たとえば VB5 では、vbBlack は &H00000000 になりますし、vbDesktop は &H80000001 です。
>
>>  vb5で使ったQBColorの例えば、黒の場合は 0、
>
> VB5 の vbBlack は数値としては &H0 で表されましたが、.NET の Color.Black は
> &HFF000000 になります。この場合の先頭 FF は Alpha 値であり、完全不透明を意味します。
>
> VB5 の色は BGR 順の &H00BBGGRR (または &H800000xx )の形式でしたが、
> .NET の ARGB 表現では RGB 順の &HAARRGGBB であることに注意が必要です。
>
>
>>青の場合は8388608、緑の場合は32768、シアンの場合は8921376、赤の場合は128という具合の文字列を想定
>>していたものですから。
>
> VB5 の QBColor 関数も VB2010 の QBColor メソッドも、戻り値はいずれも
> 「32bit 整数型」であって、「文字列型」では無いことに注意してください。
>
> ・VB5 の VBA.Information.QBColor は、As Long(あるいは As OLE_COLOR)。
> ・VB2010 の Microsoft.VisualBasic.Information.QBColor は As Integer(あるいは As Int32)。
>
>
> 単純に Integer から String にするという場合においても、10進数だったり 16進数だったり、
> 先頭ゼロ埋めだったりと、いろいろな形式があります。端折らずにきちんと説明しましょう。
>
>
> なお、QBColor メソッドの戻り値である整数を Color 構造体に変換する場合は、
> 先述した ColorTranslator.FromOle メソッドを使えば OK です。たとえば
> QBColor(0) は &H0(0)、QBColor(1) は &H800000(8388608)、QBColor(2) は &H8000(32768) ですが、
>
>  Dim c0 As Color = ColorTranslator.FromOle(QBColor(0))
>  Dim c1 As Color = ColorTranslator.FromOle(QBColor(1))
>  Dim c2 As Color = ColorTranslator.FromOle(QBColor(2))
>
> とした場合、c0 は Black、c1 は Navy、c2 は Green に変換されます。
> (QBColor 以外の色についても、同様に変換できます)
>
>
> 逆に、Navy な色を
>>青の場合は8388608
> に戻したい場合には、
>  Dim i As Integer = ColorTranslator.ToOle(c1)
> のようになります。あるいは、ARGB 値から BGR 値に変換するために
>  Dim j As Integer = c1.B * &H10000 + c1.G * &H100 + c1.R
> のようにすることもできますし、16進数文字列がお望みなら
>  Dim s As String = String.Format("{2:X2}{1:X2}{0:X2}", c1.R, c1.G, c1.B)
> と記述できます。

魔界の仮面弁士様

有難うございました。解決しました。



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


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

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -