画像のネガ・ポジ変換(T) <TOP>
写真、絵画のネガ・ポジの変換を実行します。
BitBlt ビットブロックの転送
GetDC デバイスコンテキストのハンドルを取得
ReleaseDC デバイスコンテキストの解放
DSTINVERT(&H550009) 反転してコピー
ボタンをクリックするたびにネガ・ポジを繰り返します。
'================================================================ '= ネガ・ポジ変換 '= (Nega.bas) '================================================================ #include "Windows.bi" ' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー Declare Function Api_BitBlt& Lib "gdi32" Alias "BitBlt" (ByVal hDestDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal dwRop&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define DSTINVERT &H550009 'コピー先を反転してコピー Var Shared Picture1 As Object Var Shared Button1 As Object Var Shared Bitmap As Object Picture1.Attach GetDlgItem("Picture1") Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 BitmapObject Bitmap '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() Bitmap.LoadFile "flower.bmp" Picture1.StretchBitmap Bitmap, 0, 0, Picture1.GetWidth, Picture1.GetHeight Bitmap.DeleteBitmap End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var hDC As Long Var Ret As Long hDC = Api_GetDC(Picture1.GethWnd) 'Positive <-> Negative Ret = Api_BitBlt(hDC, 0, 0, Picture1.GetWidth, Picture1.GetHeight, hDC, 0, 0, DSTINVERT) Ret = Api_ReleaseDC(Picture1.GethWnd, hDC) End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End