Beispiele



Dies ist keineswegs eine vollständige Referenz aller für Plugins verfügbaren Funktionen.

*Bei allen Beispielen wird davon ausgegangen, dass ein Dogwaffle-Objekt erstellt wurde.

* Hinweis: VB.Net erfordert eine Änderung der Datentypen. VB5/6 verwendet 32-Bit-Längen und 16-Bit-Ganzzahlen. VB.Net verwendet 64-Bit-Längen und 32-Bit-Ganzzahlen. Die Verwendung von VB5/6 wird in diesem Dokument angenommen, sofern nicht anders angegeben. Ausführliche Informationen finden Sie in der Dokumentation zur VB.net-Migration .


Grundlagen und Image-bezogene

Erstellen eines Dogwaffle-Objekts

Kopie des aktuellen Bildes wird abgerufen

Senden eines Bildes zurück an Project Dogwaffle

Breite und Höhe des aktuellen Bildes abrufen

Arbeiten mit einem Alphakanal

Fortschrittsleiste und Sanduhrzeiger

Neues Bild erstellen

Rückgängig

Puffersperren


pinselbezogen

Abrufen des aktuellen benutzerdefinierten Pinselbilds

Neuen benutzerdefinierten Pinsel erstellen

Die aktuelle benutzerdefinierte Pinselbreite und -höhe abrufen

 

Farben, Verläufe und Vertiefungen

Abrufen der Primär- und Sekundärfarben

Kopie des Farbverlaufs erstellen

Farbeinstellungen in den Farbkammern


Animationsbezogene

Anzeigen und Aufrufen eines bestimmten Frames 

Neue Animation erstellen

Animationsverarbeitung


Eingabefelder und spezielle Funktionen

Anforderer zum Öffnen und Speichern von Dateien

Nachrichtenfelder

Frageboxen

Wertfelder    

Das temporäre Verzeichnis

Lese- und Schreibspeicher

Bildverarbeitungs-DLL-Funktionen

DLL-Funktionen des Dienstprogramms

Hintergrund und Stile



Erstellen eines Dogwaffle-Objekts


Alle für Plug-ins verfügbaren Funktionen werden über ein Dogwaffle-Objekt aufgerufen.

 

'Erstellen eines Dogwaffle-Objekts

Dim Dogwaffle als Objekt

Set Dogwaffle = CreateObject("Dogwaffle.Dogwaffle_Class")


Kopie des aktuellen Bildes wird abgerufen


'Hauptpuffer zuweisen

Dim MainRBuffer() As Byte

Dim MainGBuffer() As Byte

Dim MainBuffer() As Byte

Dim MainBuffer() As Byte

Die Puffer holen

MainRBuffer() = Dogwaffle.Dog_GetRBuffer

MainGBuffer() = Dogwaffle.Dog_GetGBuffer

MainPuffer() = Dogwaffle.Dog_GetPuffer

MainBuffer() = Dogwaffle.Dog_GetBuffer


Senden eines Bildes zurück an Project Dogwaffle


Ich schicke die Puffer zurück zur Hundewaffel.

Dogwaffle.Dog_SetRbuffer MainRBuffer()

Dogwaffle.Dog_SetGbuffer MainGBuffer()

Dogwaffle.Dog_SetBuffer MainBuffer()


'und Bildschirm aktualisieren

dogwaffle.dog_refresh


Breite und Höhe des aktuellen Bildes abrufen


'die Breite und Höhe des Puffers abrufen

tw ist dunkel, tw ist dunkel

th = Dogwaffle.Dog_BufferHeight;

tw = Dogwaffle.Dog_BufferWidth;


Neues Bild erstellen (neuer Puffer)


Dim myFilename As String

MyFilename = "My new buffer"

tw = 640

th = 480

Dogwaffle.Dog_NewBuffer CInt(tw), CInt(th)


'Namen für den neuen Puffer vergeben

'und aktualisieren dogwaffles interne Dateiname Zeichenfolge

Dogwaffle.Dog_RenameBuffer (MyFilename)

Dogwaffle.Dog_NewFilename (MyFilename)


Arbeiten mit einem Alphakanal


Dim alphabits As Long

alphabits = Dogwaffle.Dog_GetAlphabits;


Wenn das Alphabet 0 ist, ist der Alpha-Wert aktiv. 

Man kann Alphamischungen auf diese Weise erreichen. ((r * a) + (r2 * (255-a)) \ 255


"r2,g2,b2 sollte definiert werden.

      r = MainRBuffer(x, y)

      g = MainGBuffer(x, y)

      b = MainBuffer(x, y)

        If alphabits = 0 Then

        a = MainBuffer(x, y)

        a2 = 255 - a

            r = ((r * a) + (r2 * a2)) \ 255

            g = ((g * a) + (g2 * a2)) \ 255

            b = ((b * a) + (b2 * a2)) \ 255

        Ende wenn 


Die Fortschrittsleiste

 

ole.gif

Während Ihr Plugin Code ausführt, können Sie den Benutzer über den Fortschritt mit der Plugin-Fortschrittsleiste auf dem Laufenden halten. Sie wird mit einem Single-Wert zwischen 0 und 100 aufgerufen, wie folgt:


Dim value As Single

Wert = 50

Dogwaffle.Dog_SetProgress-Wert


Vergessen Sie nicht, die Fortschrittsleiste nach Abschluss des Vorgangs zurückzusetzen.


Dogwaffle.Dog_SetProgress 0


Mauszeiger auf einen Sanduhrzeiger ändern


Dogwaffle.Dog_ChangePointer (11)


Ändern Sie sie wieder


Dogwaffle.Dog_RestorePointer


Rückgängigmachen speichern


Sie müssen beim Ausführen eines Plug-ins keine Rückgängig-Aktion speichern, da diese automatisch gespeichert wird. Die Funktion ist jedoch verfügbar.

 

Dogwaffle.Dog_SaveUndo


Puffersperren


Ein Puffer kann gesperrt werden, um zu verhindern, dass der Benutzer Änderungen vornimmt, während ein Plugin läuft. Sie müssen einen Puffer entsperren, sobald Sie ihn fertig haben.


 

dogwaffle.dog_lock

 

Puffer entsperren

 

dogWaffle.dog_unlock

 

Der Sperrmechanismus zählt Puffersperren. Sollte ein Plug-in vor dem Entsperren des Puffers abstürzen, muss möglicherweise eine Hard-Entsperrung durchgeführt werden.

 

Dogwaffle.dog_unlockHard





Benutzerdefinierte Pinsel


Abrufen des aktuellen benutzerdefinierten Pinselbilds


Wenn die Breite des aktuellen benutzerdefinierten Pinsels 0 beträgt, ist derzeit kein benutzerdefinierter Pinsel definiert. Siehe Die aktuelle benutzerdefinierte Pinselbreite und -höhe abrufen


Dimmt die Puffer

Dim MainRBuffer() As Byte

Dim MainGBuffer() As Byte 

Dim MainBuffer() As Byte

Dim MainABuffer() As Byte


Die Puffer von der Hundewaffel holen

MainRBuffer() = Dogwaffle.Dog_GetBrushRBuffer

MainGBuffer() = Dogwaffle.Dog_GetBrushGBuffer

MainPuffer() = Dogwaffle.Dog_GetBrushPuffer

MainABuffer() = Dogwaffle.Dog_GetBrushABuffer


Die aktuelle benutzerdefinierte Pinselbreite und -höhe abrufen


Dim tw As Long, th As Long

tw = Dogwaffle.Dog_GetBrushWidth;

th = Dogwaffle.Dog_GetBrushHeight;


Erstellen eines neuen benutzerdefinierten Pinsels


Um einen neuen benutzerdefinierten Pinsel zu erstellen, initialisieren Sie ihn zunächst durch Aufruf von CreateEmptyBrush. Anschließend senden Sie Ihre eigenen Bilder, die in einem Satz von Bytearrays definiert sind.


Dim tw As Long, th As Long


'Pinsel mit 100x100 Pixel erstellen...

tw = 100

th = 100


Dimmt die Puffer

ReDim BrushRBuffer(tw, th) As Byte

ReDim BrushGBuffer(tw, th) As Byte

BrushBuffer(tw, th) als Byte zurücksetzen

Pinsel haben einen 'key'-Kanal, ähnlich einem Alphakanal.

ReDim BrushABuffer(tw, th) As Byte


'einen neuen, leeren Pinsel erstellen. Dies muss vor dem Senden von Bildern geschehen.

Dogwaffle.Dog_CreateEmptyBrush tw, th


'Tu etwas, um hier die Pinsel-Arrays auszufüllen...

Für y = 0 bis th - 1

 Für x = 0 bis tw - 1

  BrushRBuffer(x, y) = Rnd * 255

  BrushGBuffer(x, y) = Rnd * 255

  BrushPuffer(x, y) = Rnd * 255

  BrushABuffer(x, y) = Rnd * 255

 Weiter

Weiter


Die Bürstenpuffer an die Hundewaffel schicken.

Dogwaffle.Dog_SetBrushRBuffer BrushRBuffer()

Dogwaffle.Dog_SetBrushGBuffer BrushGBuffer()

Dogwaffle.Dog_SetBrushPuffer BrushPuffer()

Dogwaffle.Dog_SetBrushABuffer BrushABuffer()


'kann optional das Pinselwerkzeug aktivieren.

Dogwaffle.Dog_ActivateCustomBrush


'Auch optional, aktualisiert jedoch Dinge wie das Tastenfeld des Pinsels, wenn sich der Pinsel ändert.

dogWaffle.dog_refresh_brushDisplays




Benutzereingabe


Es gibt mehrere vordefinierte Anforderer (Dialogfelder), auf die Plug-ins zugreifen können. Dazu gehören Dateianforderer, Text- und Werteingabe sowie Meldungsfelder.



Anforderer zum Öffnen und Speichern von Dateien


Zeigt dem Benutzer ein Dateidialogfeld an


MyFilename = Dogwaffle.Dog_RequestFile_Open("Wählen Sie eine zu öffnende Datei", "", "BMP|*.bmp")

MyFilename = Dogwaffle.Dog_RequestFile_Save("Wählen Sie eine zu speichernde Datei", "", "BMP|*.bmp")


Das Ergebnis "" bedeutet, dass der Anforderer abgebrochen wurde.


Nachrichtenfelder

examples.gifNachrichtenfeld

Zeigt dem Benutzer eine Nachricht an


Dogwaffle.dog_MessageBox "Fertig"


Frageboxen

examples1.gifFragebogen

Zeigt dem Benutzer die Auswahl zwischen OK und Abbrechen.


Dummy = Dogwaffle.Dog_QuestionBox("Soll ich fortfahren?")

Wenn Dummy = 2, dann Exit Sub 

 

*Nachrichten mit mehreren Zeilen können erstellt werden, indem chr$(13) in den Nachrichten-String für Nachrichten- und Fragenfelder eingefügt wird.


MyString = "Die erste Textzeile" + Chr$(13) + "Die zweite Textzeile"

Dummy = Dogwaffle.Dog_QuestionBox(MyString);


Wertfelder 

valuebox.gifFeld "Wert"

Ruft einen Wert vom Benutzer innerhalb eines bestimmten Bereichs ab.


Value = Dogwaffle.Dog_ValueBox("Geben Sie den neuen Wert ein ", 1, 100)

Wenn Wert = -1, dann Exit Sub


Eine Variante hiervon ermöglicht die Anwendung einer Beschriftung und eines Standardwerts auf das Fenster


Value = Dogwaffle.Dog_ValueBox2("Geben Sie den neuen Wert ein", "Caption", 1, 100, 10)






Die primäre und sekundäre Farbe


Abrufen der Primär- oder Sekundärfarben


TempColor abdunkeln

tempcolor = Dogwaffle.Dog_getPrimaryColor;

"tempcolor = Dogwaffle.Dog_getSecondaryColor

r = tempcolor Und &HFF& 'das extra '&' zwingt es zu einem Long. VB ist standardmäßig 16 Bit. Na klar.

g = (tempcolor und &HFF00&) \ 256

b = (tempcolor und &HFF0000) \ 65536


Der Verlauf


Kopie des Farbverlaufs erstellen


Ein Beispiel. Dadurch wird der Farbverlauf eines Picturebox-Steuerelements angezeigt, bei dem der Skalierungsmodus auf Pixel festgelegt ist.


Dim myArray() As Byte

ReDim MyArray(255, 2)

MyArray = Dogwaffle.Dog_GetGradient(Dogwaffle.Dog_GetGradientIndex);


h = Picture1.ScaleWidth


Für x = 0 bis 255

            r = MyArray(X, 0)

            g = MyArray(X, 1)

            b = MyArray(X, 2)

            Picture1.Line (X, 0)-(X, h), RGB(r, g, b)

Weiter




Brunnen


Farbeinstellungen in den Farbkammern


'Beispiel: Setzen Sie zufällige Farben in die Farbmulden


Dim myWell() As Long

ReDim MyWell(63) '64 Farben

Für n = 0 bis 63

MyWell(n) = RGB(Rnd * 255, Rnd * 255, Rnd * 255)

Weiter


'sende es an dogwaffle

Dogwaffle.Dog_SetWells MyWell




Animation 


Zu einem bestimmten Frame wechseln


Dogwaffle.dog_gotoframe-Rahmen


Abrufen der Anzahl an Frames in einer Animation


TotalFrames = Dogwaffle.dog_GetTotalFrames


Wiedergabe und Anhalten der Animationswiedergabe


Dogwaffle.dog_PlayAnimation


Dogwaffle.dog_StopAnimation


Neue Animation erstellen


Ein Beispiel für die Frage an den Benutzer, wie viele Frames einer neuen Animation erstellt werden sollen.


Dim value As Long

Value = Val(InputBox("Create new animation", "Frame count", "30"))

Wenn Wert <= 1, dann "Sub" beenden

Dogwaffle.Dog_CreateAnim-Wert

Dogwaffle.Dog_ShowScrub 0, Dogwaffle.Dog_GetTotalFrames

                                                                                                            

Verarbeitung der Frames einer Animation


Um die Frames einer Animation zu verarbeiten, gehen Sie einfach zu jedem Frame mit einem Aufruf von Dog_GotoFrame und verwenden Sie dann die regulären Pufferfunktionen, um die RGB-Puffer abzurufen und festzulegen. Wenn Sie mit jedem Frame fertig sind, kehren Sie mit einem letzten Aufruf von Dog_GotoFrame zum ersten Frame zurück.


'Hauptpuffer zuweisen'

Dim n As Long

Dim MainRBuffer() As Byte

Dim MainGBuffer() As Byte

Dim MainBuffer() As Byte

Dim MainBuffer() As Byte

Dim tw As Long, th As Long, x As Long, y As Long

Dim start_frame so lang, end_frame so lang


th = Dogwaffle.Dog_BufferHeight;

tw = Dogwaffle.Dog_BufferWidth;


Begin_Frame = 0

End_Frame = Dogwaffle.dog_GetTotalFrames - 1


Für n = Begin_Frame bis End_Frame


Dogwaffle.Dog_GotoFrame n


'Puffer für den aktuellen Frame abrufen

MainRBuffer() = Dogwaffle.Dog_GetRBuffer

MainGBuffer() = Dogwaffle.Dog_GetGBuffer

MainPuffer() = Dogwaffle.Dog_GetPuffer

MainBuffer() = Dogwaffle.Dog_GetBuffer


'Puffer irgendwie verarbeiten.

Für y = 0 bis th-1

  Für x = 0 bis tw-1

    MainRBuffer(x, y) = 255 - MainRBuffer(x, y)

    MainGBuffer(x, y) = 255 - MainGBuffer(x, y)

    MainBuffer(x, y) = 255 - MainBuffer(x, y)

  Weiter

Weiter


'Schicken Sie es zurück

Dogwaffle.Dog_SetRbuffer MainRBuffer

Dogwaffle.Dog_SetGbuffer MainGBuffer

Dogwaffle.Dog_SetBuffer MainBuffer


'sollte wahrscheinlich Fortschrittsleiste verwenden

Weiter


Dogwaffle.Dog_GotoFrame Begin_Frame

dogwaffle.dog_Refresh




Besondere Funktionen


Das temporäre Verzeichnis


Project Dogwaffle verwaltet ein temporäres Verzeichnis für die temporäre Speicherung. Sie können dieses Verzeichnis für Ihre eigene Verwendung verwenden und müssen selbst bereinigen. Im Folgenden erfahren Sie, wie Sie den Pfadnamen für das temporäre Verzeichnis abrufen.


tempdir als Zeichenfolge

tempdir = Dogwaffle.Dog_GetTempDir;


Im Folgenden finden Sie ein Beispiel, mit dem Benutzer das temporäre Verzeichnis durchsuchen können.


Declare function ShellExecute lib "shell32.dll" alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Const SW_SHOWNORMAL = 1


Sub Main()

Dim dogwaffle als Objekt, Dim tempdir als Zeichenfolge

Set Dogwaffle = CreateObject("Dogwaffle.Dogwaffle_Class")

tempdir = Dogwaffle.Dog_GetTempDir;

ShellExecute 0, vbNullString, "", vbNullString, tempdir, SW_SHOWNORMAL

End Sub


Lese- und Schreibspeicher


Diese Funktionen werden von Drpaint.dll exportiert.


Es gibt einige Strukturen im Windows-Betriebssystem, die direkten Zugriff auf den Speicher erfordern, wie z. B. Dibs. Die folgenden Funktionen werden zu Ihrem Vorteil exportiert, verwenden Sie sie jedoch mit Vorsicht. 


'send by ref and returns a pointer in a long

Declare-Funktion GetAddressByte Lib "Drpaint.dll" (ByRef MyArray As Byte) As Long

Declare-Funktion GetAddressWord-Bibliothek "Draint.dll" (ByRef MyArray As Integer) als Long

Declare-Funktion GetAddressLong-Bibliothek "Drpaint.dll" (ByRef MyArray As Long) As Long

'

Sub WriteByte Lib als "Draint.dll" deklarieren (ByVal Adresse als Long, ByVal Wert als Byte)

Sub WriteWord-Bibliothek als "DrawPaint.dll" deklarieren (ByVal Adresse als Long, ByVal Wert als Integer)

Sub WriteLong-Bibliothek als "Draint.dll" deklarieren (ByVal Adresse als Long, ByVal Wert als Long)

'

Declare-Funktion ReadByte-Bibliothek "Drpaint.dll" (ByVal Address As Long) als Byte

Declare-Funktion ReadWord-Bibliothek "Drain.dll" (ByVal Address As Long) als Ganzzahl

Declare function ReadLong-Bibliothek "draint.dll" (ByVal Adresse As Long) As Long




Allgemeine Bildverarbeitung


Dies sind keine Mitglieder der Plug-in-Schnittstelle, sondern Funktionen, die von drfilter.dll für die allgemeine Bildverarbeitung exportiert werden


Faltungskern


Diese Funktion führt einen Faltungskernelfilter für ein in einem Bytearray enthaltenes Bild aus und speichert es in einem anderen Array.


Declare function convolve8 lib "drfilter.dll" (source als Byte, dest als Byte, ByVal w als Ganzzahl, ByVal h als Ganzzahl, ByVal v1 als Einzel, ByVal v2 als Einzel, ByVal v3 als Einzel, ByVal v4 als Einzel, ByVal v5 als Einzel, ByVal v6 als Einzel, ByVal v7 als Einzel, ByVal v8 als Einzel, ByVal v9 als Einzel, ByVal vsum als Einzel, ByVal mittel er) As Long


Beispiel für die Verwendung eines Faltungskernels zum Prägen eines Bildes. In diesem Fall handelt es sich um ein Graustufenbild. Einmal für jeden Puffer eines Farbbildes anwenden.

Bei verschiedenen Kernel können Sie auch Weichzeichnung, Kantenerkennung, Scharfzeichnung und andere Effekte anwenden.


'eine Prägung machen

v1 = -1 : v2 = -1 : v3 = 0

v4 = -1 : v5 = 0 : v6 = 1

v7 = 0 : v8 = 1 : v9 = 1

vsum = 1

dummy = Convolve8(TempBuffer(0, 0), Mainbuffer(0, 0), TempWidth, TempHeight, v1, v2, v3, v4, v5, v6, v7, v8, v9, vsum, 128)


Sobel-Kantenerkennung


Die Sobel-Edge-Erkennung ist ein wichtiger Bestandteil vieler Routinen, die zur Nachahmung traditioneller Bleistiftzeichnungen verwendet werden, wie z. B. "Loose and Sketchy". Diese Implementierung verwendet einen Gleitkommapuffer. Daher muss ein Dogwaffle-Puffer vor der Verwendung in einen Single-Puffer und dann zurück konvertiert werden.


Deklarieren Sie die Funktion SobelF Lib "drfilter.dll" (Quelle als Single, Ziel als Single, NachVal W als Long, NachVal h als Long) als Long.


Kanalwert


Diese Funktion multipliziert alle Werte in einem Bytearray mit einem spezifizierten Wert. Sie können dies einmal für jeden Kanal R, G und B verwenden, um einen Farbanpassungsfilter zu erstellen oder den Wert eines Graustufenbildes anzupassen.


Declare Function ChannelValue Lib "drfilter.dll" (source As Byte, dest As Byte, abuf As Byte, ByVal Alphabets As Byte, ByVal W As Integer, ByVal h As Integer, ByVal Value As Single) As Long


Rauschen


Diese Funktionen wenden Farb- oder Wertrauschen auf alle Arrays eines Bildes an.


Sub ApplyValueNoise Lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal Alphabete als Byte, ByVal W als Long, ByVal h als Long, ByVal Wert als Long)


Sub ApplyColorNoise Lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal Alphabete als Byte, ByVal W als Long, ByVal h als Long, ByVal Wert als Long)


Blauer und Grüner Bildschirm


Die Blue- und Greenscreen-Funktionen erfordern eine Lookup-Tabelle von 256 Byte, die eine Rampe definiert.


Sub FastBluescreen Lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal W als Long, ByVal h als Long, rbuf2 als Byte, gbuf2 als Byte, bbuf2 als Byte, rbuf3 als Byte, gbuf3 als Byte, bbuf3 als Byte, lut als Byte, ByVal Fakeblue als Long, ByVal) its As Long)


Sub FastGreenscreen Lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal W als Long, ByVal h als Long, rbuf2 als Byte, gbuf2 als Byte, bbuf2 als Byte, rbuf3 als Byte, gbuf3 als Byte, bbuf3 als Byte, lut als Byte, ByVal Fakegreen als Long, ByVal) its As Long)


Schwellenwert


Konvertiert ein Bild in Schwarz oder Weiß, wobei der Medianwert ein angegebener Wert ist.


Sub FastThreshold-Bibliothek als "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, rbuf2 als Byte, gbuf2 als Byte, bbuf2 als Byte, byVal W als Long, byVal h als Long, byVal Threshold als Long, byVal Invert als Long)


Median


Deklarieren Sie Sub FastMedian Lib "drfilter.dll" (Rubuf als Byte, ugBuff als Byte, ubBuff als Byte, Rbuff als Byte, Gbuff als Byte, Buff als Byte, abuf als Byte, ByVal Alphabete als Byte, ByVal W als Long, ByVal h als Long)


zittern


Sub FastJitter Lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal W als Long, ByVal h als Long, rbuf2 als Byte, gbuf2 als Byte, bbuf2 als Byte, ByVal Wert als Long, ByVal Alphabete als Long)


Posterisieren


Sub FastPosterize lib "drfilter.dll" deklarieren (rbuf als Byte, gbuf als Byte, bbuf als Byte, abuf als Byte, ByVal W als Long, ByVal h als Long, rbuf2 als Byte, gbuf2 als Byte, bbuf2 als Byte, ByVal Wert als Long, ByVal Alphabete als Long)


Tönung


Sub FastTint Lib als "drfilter.dll" deklarieren (ByRef rbuffer als Byte, ByRef GBuffer als Byte, ByRef bbuffer als Byte, ByRef destrbuffer als Byte, ByRef destgbuffer als Byte, ByRef destbbuffer als Byte, ByVal r als Long, ByVal g als Long, ByVal b als Long, ByVal W als Long, ByVal h als Long)


Zeichenfunktionen


Zeichnet einen Stift in einen einzelnen Kanal. Erfordert 3 Farbaufrufe, einen für jeden Kanal. Der Stift ist vollständig antialimiert und verwendet Gleitkommakoordinaten.


Deklarieren Sie die Sub-cpen-Bibliothek "drfilter.dll" (ByRef Dest als Byte, ByVal X als Single, ByVal Y als Single, ByVal Größe als Single, ByVal Intensität als Single, ByVal Deckkraft als Single, ByVal W als Long, ByVal h als Long)


Deklarieren Sie Sub Alpha Lib "drfilter.dll" (ByRef Dest als Byte, ByRef Alpha als Byte, ByVal X als Single, ByVal Y als Single, ByVal Größe als Single, ByVal Intensität als Single, ByVal Deckkraft als Single, ByVal W als Long, ByVal h als Long)





Dienstprogrammfunktionen


AngleOf


Gibt den Winkel zwischen x, y und 0, 0 zurück.


Funktionswinkel der Bibliothek "drfilter.dll" (ByVal X als Single, ByVal Y als Single) als Single deklarieren


HSV


Sub RGB_to_HSV-Bibliothek als "drfilter.dll" deklarieren (ByVal r als Single, ByVal g als Single, ByVal b als Single, h als Single, s als Single, v als Single)


Sub HSV_to_RGB lib "drfilter.dll" deklarieren (r als Single, g als Single, b als Single, byVal h als Single, byVal s als Single, byVal v als Single)


Bitverschiebung


Nach rechts verschieben


Public Function ShiftR(ByVal e As Long, ByVal v As Long) As Long

Wenn v = 0, dann ShiftR = e: Ausstiegsfunktion

Dim n As Long

Für n = 0 bis v - 1

e = e \ 2

Weiter

ShiftR = e

Ende-Funktion

 

Links verschieben


Public Function ShiftL(ByVal e As Long, ByVal v As Long) As Long

Wenn v = 0, dann ShiftL = e: Ausstiegsfunktion

Dim n As Long

Für n = 0 bis v - 1

e = e * 2

Weiter

ShiftL = e

Ende-Funktion


Austauschen



Public Sub Swap(ByRef v1, ByRef v2)


'Tauschen Sie zwei Variablen aus. spart ungenutzten Speicher

'einfach genug, um inline zu arbeiten.


v1 = v1 Xor v2

v2 = v2 Xor v1

v1 = v1 Xor v2

End Sub


Minimum von zwei Werten zurückgeben


Public Function Minimum(ByVal v1 As Long, ByVal v2 As Long) As Long

'gibt mindestens zwei Werte zurück.

Wenn v1 > v2 dann Minimum= v2 Sonst Minimum= v1

Ende-Funktion


Maximal zwei Werte zurückgeben


Öffentliche Funktion Maximum(ByVal v1 As Long, ByVal v2 As Long) As Long

'gibt die maximale Anzahl von zwei Werten zurück.

Wenn v1 > v2, dann Maximum= v1 Sonst Maximum= v2

Ende-Funktion


Tauscht zwei Werte aus, sodass der erste der kleinste Wert ist


Public Function MinSwap(ByRef v1 As Long, ByRef v2 As Long) As Long

'tauscht die Werte aus, um den kleinsten zuerst zu machen.

'gibt 1 zurück, wenn Werte ausgetauscht wurden, oder 0, wenn nicht

Wenn v1 > v2 Dann

v1 = v1 Xor v2

v2 = v2 Xor v1

v1 = v1 Xor v2

MinSwap = 1

Else

MinSwap = 0

Ende wenn

Ende-Funktion


Tauscht zwei Werte aus, sodass der erste der größte Wert ist


Public Function MaxSwap(ByRef v1 As Long, ByRef v2 As Long) As Long

'tauscht die Werte aus, um den kleinsten zuerst zu machen.

'gibt 1 zurück, wenn Werte ausgetauscht wurden, oder 0, wenn nicht

Wenn v1 < v2 Dann

MaxSwap = 1

v1 = v1 Xor v2

v2 = v2 Xor v1

v1 = v1 Xor v2

Else

MaxSwap = 0

Ende wenn

Ende-Funktion


Dreht einen 2D-Punkt um 0


Public Sub RotatePoint(ByVal angle As Single, ByRef u As Single, ByRef v As Single)

'dreht sich derzeit um 0

'Ein 2D-Objekt wird um eine Achse gedreht.

'Drehen eines 3D-Objekts um 3 Achsen,

'so nennen Sie dies einmal für jede Achse.

winkel = winkel * 0,01745

new_u = single;

New_v als Single dimmen

New_U = u * Cos(winkel) - v * Sin(winkel)

New_V = u * Sin(winkel) + v * Cos(winkel)

u = new_U

v = new_v

End Sub


Konvertieren von "gepackten" Farben


Dim R = lang, G = lang, B = lang, C = lang

C = Picture1.Point(X, Y)

R = C und &HFF&

G = (C und &HFF00&) \ &H100&

B = (C und &HFF0000) \ &H10000


Abstand zwischen zwei Punkten


Öffentliche Funktionsdistanz (x1 als Single, y1 als Single, x2 als Single, y2 als Single) als Single

'Finde die Entfernung

Dim xSum As Single

Dim Sum As Single

Summe der Dezimalstellen als Einzelwert

xSum = x1 - x2

xSum = Abs(xSum)

xSum = xSum ^ 2

ySum = y1 - y2

ySum = Abs(ySum)

ySum = ySum ^ 2

Summe = xSum + ySum

Distance = Sqr(Totalsum) 'return value

Ende-Funktion


Smoothstep


Public Function smoothstep(ByVal a As Single, ByVal b As Single, ByVal x As Single) As Single

If (x < a) Then smoothstep = 0: Ausstiegsfunktion

Wenn (x >= b) dann smoothstep = 1: Ausstiegsfunktion

x = (x - a) / (b - a)

Smoothstep = (x * x * (3 - 2 * x))

Ende-Funktion


Eine einfache Gitterrauschfunktion (Glättung von oben erforderlich)


Um die besten Ergebnisse zu erzielen, summieren Sie mehrere Schichten der Rauschfunktion in verschiedenen Größen und Versätzen.


Rauschen der öffentlichen statischen Funktion (durch Val x als Single, durch Val y als Single) als Single

Const LatticeSize As Long = 64

Dim Lattice() As Single

Dim initialisiert als Boolesch

Dim lx As Long, Ly As Long

difx als Single, dify als Single

Dim x1 As Long, y1 As Long, x2 As Long, y2 As Long

Dim x3 = lang, y3 = lang, x4 = lang, y4 = lang

Dim v1 als Single, v2 als Single, v3 als Single, v4 als Single


'initialisieren, wenn dies der erste Aufruf ist

Bei Initialisierung <> true then

ReDim Lattice(LatticeSize - 1, LatticeSize - 1)

Für ly = 0 bis LatticeSize - 1

 Für lx = 0 bis LatticeSize - 1

  Lattice(lx, ly) = Rnd

 Weiter

Weiter

Initialisiert = true

Ende wenn


x = abs(x) : y = Abs(y)


difx = x - Int(x)

dify = y - Int(y)


'Glätten Sie die Unterschiede

difx = smoothstep(0, 1, difx) 

dify = smoothstep(0, 1, dify)


x1 = Int(x) : y1 = Int(y)

x2 = x1 + 1: y2 = y1

x3 = x1 : y3 = y1 + 1

x4 = x1 + 1 : y4 = y1 + 1

x1 = x1 Mod LatticeSize : y1 = y1 Mod LatticeSize

x2 = x2 mod LatticeSize : y2 = y2 mod latticeSize

x3 = x3 mod LatticeSize : y3 = y3 Mod LatticeSize

x4 = x4 Mod LatticeSize : y4 = y4 Mod LatticeSize

v1 = Lattice(x1, y1) : v2 = Lattice(x2, y2)

v3 = Lattice(x3, y3) : v4 = Lattice(x4, y4)


Rauschen = (((v1 * (1 - difx)) + (v2 * difx)) * (1 - dify)) _

        + ((v3 * (1 - difx)) + (v4 * difx)) * dify)


Ende-Funktion