ďťż

art11

Lemur zaprasza



API - funkcje graficzne



Mam dla Was bardzo przydatne funkcje graficzne. Są one o tyle istotne, że nie mają
odpowiedników w wewnętrznej składni Visual Basic lub działają od nich znacznie
szybciej. Metody graficzne są zbyt powolne w bardziej zaawansowanych programach i nie
obsługują większości dostarczanych przez API efektów. Od razu wyjaśniam, że nie
będzie tu nic o funkcjach zawartych w bibliotekach pakietu DirectX. Będą to tylko API
zmieniające grafikę w typowych formularzach, bez inicjacji środowiska Direct Draw i
Direct3D.



SetPixel

Odpowiednik w składni VB: metoda PSet



Ta funkcja umożliwia zmianę koloru dowolnego punktu w formie. Oto kod w module
standardowym:



Public Declare Function SetPixel Lib "gdi32" (ByVal
hdc As Long, _

    ByVal X As Long, ByVal Y As Long, ByVal crColor As Long) As Long



Public Function SetCurrentColor(hdc As Long, X As Single, Y As Single, color As Long) As
String

    Dim a As Long

    a = SetPixel(hdc, WspółrzędnaX, WspółrzędnaY, kolor)

    SetCurrentColor = a

End Function



Kolor wpisujemy w kodzie heksadecymalnym. Położenie w osi X i Y wpisujemy w twipach. A
oto kod formy:



Private Sub Form_MouseUp(Button As Integer, Shift As Integer,
X As Single, Y As Single)

Call SetCurrentColor(Me.hdc, X, Y, 1234554)

End Sub



I to wszystko! Wartość współrzędnych X i Y możemy podać albo w module, albo w
formie. Nie zauważyłem różnicy.



StretchBlt

Odowiednik w składni VB: brak!



Jest to ciekawa funkcja. Umożliwia powiększanie, zmniejszanie i kopiowanie grafiki.
Podam tutaj przykład z płynnym powiększaniem obrazu (z VB4All). Oto kod (w formie - nie
trzeba pisać w module!):



Private Declare Function StretchBlt Lib "gdi32"
(ByVal hdc As Long, ByVal X As Long, _

    ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _

    ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _

    ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As
Long) As Long

Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, _

    ByVal nStretchMode As Long) As Long



Const SRCCOPY = &HCC0020



Const STRETCH_ANDSCANS = 1

Const STRETCH_DELETESCANS = 3

Const STRETCH_HALFTONE = 4

Const STRETCH_ORSCANS = 2



To wpisujemy w sekcji General. Teraz tworzymy przycisk i dwa pola obrazu:
picPicture1 i picPicture2. Piszemy (w kodzie przycisku):



Dim X As Long

Dim i As Integer

Dim H1 As Integer, W1 As Integer

Dim hdc1 As Long, hdc2 As Long



W1 = picPicture1.ScaleWidth

H1 = picPicture1.ScaleHeight



hdc1 = picPicture1.hdc

hdc2 = picPicture2.hdc



X = SetStretchBltMode(picPicture2.hdc, STRETCH_DELETESCANS)



If X Then

    For i = 0 To 100

        X = StretchBlt(hdc2, 0, 0, W1 + i, H1 + i,
hdc1, 0, 0, W1, H1, SRCCOPY)

        picPicture2.Refresh

        DoEvents

    Next

End If



To dwie i najpopularniejsze funkcje API. Mogą się bardzo przydać przy pisaniu
programów graficznych.



M.P.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • teen-mushing.xlx.pl
  • Wątki
    Powered by wordpress | Theme: simpletex | © Lemur zaprasza