グレースケールとは、名前の通り灰色の尺度のみで表現したカラーの ことです。R値,G値,B値がそれぞれ等しいとき、示される色は灰色に なります。灰色にはR値=G値=B値=0〜255 の256段階の256色のパレットを 使用します。
★主な処理★
1677万色や256色のビットマップをこのグレースケールで保存するには、 まず、パレットをつくり、1ピクセルずつそのパレットに適した色に変換し、 そのパレット番号をファイルに出力しなければなりません。1ピクセルごとの色の変換は、色の強さのみで行います。例えば、変換元の 色が (R,G,B)=(128,64,192)であれば、変換後の色は、
'グレースケールの256色のパレット作成 For i = 0& To COLOR_COUNT_256 - 1& Pal(i).r = i Pal(i).g = i Pal(i).b = i Next i
ps = (128 + 64 + 192) \ 3 = 128 より (R,G,B)=(128,128,128) となります。
'保存もとの色データを取得 pc = PicObje.Point(px, py) 'その長整数型pcのビット分解 r = CInt(pc And &HFF)'3バイト目を得る g = CInt((pc \ 256&) And &HFF)'2バイト目を得る b = CInt((pc \ 65536) And &HFF)'1バイト目を得る '色の度合いを平均してそれをグレースケールの度合いに使う buf(i) = CByte((r + g + b) \ 3)
★クラスの使用法★
Dim msg As String Dim cbc As New CBmpConvert On Error GoTo GrayScale Me.MousePointer = 11 Call cbc.BmpConvert256G(Picture1, Text1.Text, 0&, 0&, _ Picture1.Width, Picture1.Height) Me.MousePointer = 0 Exit Sub GrayScale: Me.MousePointer = 0 msg = Err.Description MsgBox msg, vbCritical
★使用上の注意★ このクラスのプロシージャは、ピクセル単位で取り扱っています。従って、 FormとPictureオブジェのScaleModeが3でなければなりません。 また、PictureオブジェのAppearanceを0,BorderStyleを0にしておいて下さい。
(サンプルプログラムの動作確認)
機種 PC-9821V13S OS Windows95 開発ツール Visual Basic Ver.4.0 更新日 99/10/10 ダウンロード BmpConvertG.lzh(3.81KB)
Visual Basic Ver.5.0,Ver.6.0でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。
★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。