画像をハーフトーンで転送          <TOP>


画像をハーフトーンで転送します。

StretchBlt ビットマップの拡大及び縮小

SetStretchBltMode ビットマップのストレッチングモードを設定

GetColorAdjustment デバイスコンテキストのカラー補正値を取得

SetColorAdjustment デバイスコンテキストのカラー補正値を設定

GetStretchBltMode 現在のストレッチングモードを取得

 

 

'================================================================
'= 画像をハーフトーンで転送
'= COLORADJUSTMENT構造体は、StretchBlt モードが HALFTONE のときに、
'= Windows の StretchBlt 関数と StretchDIBits 関数で使われるカラー調整値を定義
'=    (ColorAdjustment.bas)
'================================================================
#include "Windows.bi"

#define ILLUMINANT_A 1                  'タングステンランプ
#define HALFTONE 4                      'ハーフトーン
#define SRCCOPY &HCC0020                'そのまま転送

Type COLORADJUSTMENT
    caSize            As Integer
    caFlags           As Integer
    caIlluminantIndex As Integer
    caRedGamma        As Integer
    caGreenGamma      As Integer
    caBlueGamma       As Integer
    caReferenceBlack  As Integer
    caReferenceWhite  As Integer
    caContrast        As Integer
    caBrightness      As Integer
    caColorfulness    As Integer
    caRedGreenTint    As Integer
End Type

' ビットマップの拡大及び縮小
Declare Function Api_StretchBlt& Lib "gdi32" Alias "StretchBlt" (ByVal hDC&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal nSrcWidth&, ByVal nSrcHeight&, ByVal dwRop&)

' ビットマップのストレッチングモードを設定
Declare Function Api_SetStretchBltMode& Lib "gdi32" Alias "SetStretchBltMode" (ByVal hDC&, ByVal nStretchMode&)

' デバイスコンテキストのカラー補正値を取得
Declare Function Api_GetColorAdjustment& Lib "gdi32" Alias "GetColorAdjustment" (ByVal hDC&, lpca As COLORADJUSTMENT)

' デバイスコンテキストのカラー補正値を設定
Declare Function Api_SetColorAdjustment& Lib "gdi32" Alias "SetColorAdjustment" (ByVal hDC&, lpca As COLORADJUSTMENT)

' 現在のストレッチングモードを取得
Declare Function Api_GetStretchBltMode& Lib "gdi32" Alias "GetStretchBltMode" (ByVal hDC&)

' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得
Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared Picture1 As Object
Var Shared Picture2 As Object
Var Shared Bitmap As Object
BitmapObject Bitmap

Picture1.Attach GetDlgItem("Picture1")
Picture2.Attach GetDlgItem("Picture2")

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Bitmap.LoadFile "Sample.bmp"
    Picture1.StretchBitmap Bitmap, 0, 0, Picture1.GetWidth, Picture1.GetHeight
'   Picture1.DrawBitmap Bitmap, 0, 0
    Bitmap.DeleteBitmap
End Sub

'================================================================
'=
'================================================================
Declare Sub Button1_on edecl ()
Sub Button1_on()
    Var CA As COLORADJUSTMENT
    Var hDC1 As Long
    Var hDC2 As Long
    Var p1Width As Long
    Var p1Height As Long
    Var Ret As Long

    CallEvent

    'デバイスコンテキスト取得
    hDC1 = Api_GetDC(Picture1.GethWnd)
    hDC2 = Api_GetDC(Picture2.GethWnd)

    p1Width = Picture1.GetWidth
    p1Height = Picture1.GetHeight

    '現在のカラーを取得
    Ret = Api_GetColorAdjustment(hDC2, CA)

    'タイプの初期化
    CA.caSize = Len(CA)

    'ブライトネスを暗く設定
    CA.caBrightness = -100

    '新しい光源を設定
    CA.caIlluminantIndex = ILLUMINANT_A

    'ハーフトーンが設定されているかチェック
    If Api_GetStretchBltMode(hDC2) <> HALFTONE Then
        'ハーフトーンでなければハーフトーンに設定
        Ret = Api_SetStretchBltMode(HDC2, HALFTONE)
    End If

    'カラーアジャストメントのアップデート
    Ret = Api_SetColorAdjustment(hDC2, CA)

    'ピクチャ1からピクチャ2にコピー
    Ret = Api_StretchBlt(hDC2, 0, 0, p1Width, p1Height, hDC1, 0, 0, p1Width, p1Height, SRCCOPY)

    'デバイスコンテキスト解放
    Ret = Api_ReleaseDC(Picture1.GethWnd, hDC1)
    Ret = Api_ReleaseDC(Picture2.GethWnd, hDC2)
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End