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 |
||
pinselbezogen |
||
Die aktuelle benutzerdefinierte Pinselbreite und -höhe abrufen |
||
Farben, Verläufe und Vertiefungen |
||
Animationsbezogene |
||
Eingabefelder und spezielle Funktionen |
||
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)
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

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
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
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.
NachrichtenfeldZeigt dem Benutzer eine Nachricht an
Dogwaffle.dog_MessageBox "Fertig"
FragebogenZeigt 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
Feld "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
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
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
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
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.
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
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)
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