画像のネガ・ポジ変換(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