【Class Library】


ビットマップをグレースケールで保存
 グレースケールとは、名前の通り灰色の尺度のみで表現したカラーの ことです。R値,G値,B値がそれぞれ等しいとき、示される色は灰色に なります。灰色にはR値=G値=B値=0〜255 の256段階の256色のパレットを 使用します。


★主な処理★

 1677万色や256色のビットマップをこのグレースケールで保存するには、 まず、パレットをつくり、1ピクセルずつそのパレットに適した色に変換し、 そのパレット番号をファイルに出力しなければなりません。

    'グレースケールの256色のパレット作成
    For i = 0& To COLOR_COUNT_256 - 1&
        Pal(i).r = i
        Pal(i).g = i
        Pal(i).b = i
    Next i

 1ピクセルごとの色の変換は、色の強さのみで行います。例えば、変換元の 色が (R,G,B)=(128,64,192)であれば、変換後の色は、
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でも問題なく動作すると思います。
なお、このコーナーに掲載されているプログラムコード、およびプログラムファ イルが原因で起きた損害などに関して一切の責任を負うことはできません。

★このコーナーに掲載されているプログラムコード、およびプログラムファ イルを無断で配布・転載することは、原則として禁止です。


Class Libraryインデックス トップページ


Copyright(C)1999-2000 Tomoya. All rights reserved.