画像をハーフトーンで転送 <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