§12 ファイル処理(2)2 | プログラミング実習 |
【3】 ファイルの読み書き
ファイルに保存するデータは、赤、緑、青の3つの値だけである。1行に1つずつ赤、緑、青の順で記録する。行単位で読み書きすることで、データの扱いが単純になる。
操作 11 プログラム終了時に、現在の色の値を保存する。ファイル名は"color.txt"とする。
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal
e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
Dim wf As New IO.StreamWriter("color.txt")
'ファイル(書き込み用)を開く
wf.WriteLine(hsbRed.Value) 'データ書き込み
wf.WriteLine(hsbGreen.Value)
wf.WriteLine(hsbBlue.Value)
wf.Close() 'ファイルを閉じる
End Sub
StreamWriterクラスを作成し、WriteLineメソッドで1行分のデータを書き込む。
WriteLineメソッドはデータを書き込んだあと、改行文字を出力する。改行文字を出力しないWriteメソッドもある。
操作 12 プログラム起動時に、色データを読み込む。Form1_Loadメソッドに次のプログラム(下線部)を追加する。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal
e As System.EventArgs) Handles MyBase.Load
hsbRed.Maximum = 255 + hsbRed.LargeChange -
1 '最大値の設定
hsbGreen.Maximum = 255 + hsbGreen.LargeChange
- 1
hsbBlue.Maximum = 255 + hsbBlue.LargeChange
- 1
Try '↓ファイル(読み込み用)を開く
Dim rf As New IO.StreamReader("color.txt")
hsbRed.Value = rf.ReadLine 'データ読み込み
hsbGreen.Value = rf.ReadLine
hsbBlue.Value = rf.ReadLine
rf.Close() 'ファイルを閉じる
Catch ex As Exception
hsbRed.Value = 0
hsbGreen.Value = 0
hsbBlue.Value = 0
End Try
ColorDisp()
End Sub
StreamReaderクラスを作成し、ReadLineメソッドで1行分のデータを読み込む。読み込むファイルがない場合は、各色の値を0で設定する。
ReadLineメソッドは改行文字までのデータを読み込む。文字単位で読み込むReadメソッドもある。
実行して、適当な色を作成して終了する。もう一度起動すると、前回の色が表示される。
【4】 Webセーフカラー
ディスプレイで表示できる色数は1677万色を超えてきたが、インターネットのように世界規模のネットワークでWebページを公開するとき、すべてのディスプレイで色が同じように見える保証はない。そこで考え出されたのがWebセーフカラーである。これは、RGBをそれぞれ6段階にして216色が定義されている。1段階あたり51である。スクロールバーのLargeChangeプロパティに設定した値である。
操作 13 [Webセーフカラー]ボタンのクリックイベントに対応するメソッドを次のように作成する。[Webセーフカラー]ボタンをダブルクリックしてメソッドを用意する。
Private Sub WSCButton_Click(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles WSCButton.Click
hsbRed.Value = Int(CDbl(hsbRed.Value) / 51
+ 0.5) * 51
hsbGreen.Value = Int(CDbl(hsbGreen.Value) /
51 + 0.5) * 51
hsbBlue.Value = Int(CDbl(hsbBlue.Value) / 51
+ 0.5) * 51
ColorDisp()
End Sub
適当な色を作成し、[Webセーフカラー]ボタンをクリックすると現在の色の値に近いWebセーフカラーの値に変換する。
Webセーフカラーの値は、51の倍数になっている。色の値を51で割って小数を四捨五入して整数にしている。
CDbl関数は、倍精度の実数に変換する。Int関数は整数部分だけを取り出す。
§12 ファイル処理(2)2 | Copyright©2008 Hiroshi Masuda |