FastGraphicsLib 1.0.0.5
- Beta
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von 00yoshi.
-
-
-
Weil du uns weder die Fehlermeldungen definierst noch einen vernünftigen Code ausführst. Definiere bitte in Zukunft deine Variablen mit Typenbezeichnung.Gruß Mangafreak
-
-
Wenn ich den Code ausführe wird ne neue Registrierkarte geöffnet in der steht:
"Der Bitmapbereich ist bereits gesperrt."
Spoiler anzeigen VB.NET-Quellcode
- Public Shared Sub Color_ersetzen(ByVal ParamArray Farbwerte() As Single)
- Dim Farbe1 As Color
- Dim Farbe2 As Color
- Dim Picture As Bitmap = Hauptfenster.PictureBox1.Image
- Dim fg As FastGraphics = FastGraphics.FromBitmap(Hauptfenster.PictureBox1.Image)
- If Farbwerte(0) = 256 Then
- If Farbwerte(4) = 256 Then
- fg.FindAndSetPixel(Color.FromArgb(Farbwerte(1), Farbwerte(2), Farbwerte(3)), Color.FromArgb(Farbwerte(5), Farbwerte(6), Farbwerte(7)))
- Else
- fg.FindAndSetPixel(Color.FromArgb(Farbwerte(1), Farbwerte(2), Farbwerte(3)), Color.FromArgb(Farbwerte(4), Farbwerte(5), Farbwerte(6), Farbwerte(7)))
- End If
- Else
- If Farbwerte(4) = 256 Then
- fg.FindAndSetPixel(Color.FromArgb(Farbwerte(0), Farbwerte(1), Farbwerte(2), Farbwerte(3)), Color.FromArgb(Farbwerte(5), Farbwerte(6), Farbwerte(7)))
- Else
- fg.FindAndSetPixel(Color.FromArgb(Farbwerte(0), Farbwerte(1), Farbwerte(2), Farbwerte(3)), Color.FromArgb(Farbwerte(4), Farbwerte(5), Farbwerte(6), Farbwerte(7)))
- End If
- End If
- Hauptfenster.PictureBox1.Image = fg.Bitmap
- ' If Farbwerte(0) = 256 Then
- ' Farbe1 = Color.FromArgb(Farbwerte(1), Farbwerte(2), Farbwerte(3))
- ' Else
- ' Farbe1 = Color.FromArgb(Farbwerte(0), Farbwerte(1), Farbwerte(2), Farbwerte(3))
- ' End If
- ' If Farbwerte(4) = 256 Then
- ' Farbe2 = Color.FromArgb(Farbwerte(5), Farbwerte(6), Farbwerte(7))
- ' Else
- ' Farbe2 = Color.FromArgb(Farbwerte(4), Farbwerte(5), Farbwerte(6), Farbwerte(7))
- ' End If
- ' For y As Single = 1 To Hauptfenster.PictureBox1.Image.Size.Height - 1
- 'For x As Single = 1 To Hauptfenster.PictureBox1.Image.Size.Width - 1
- 'If Picture.GetPixel(x, y) = Farbe1 Then
- ' Picture.SetPixel(x, y, Farbe2)
- 'End If
- ' Next
- ' Next
- ' Hauptfenster.PictureBox1.Image = Picture
- End Sub
(Mit dem Code mit ' davor (was genau das gleiche macht, nur isses langsamer) funktionierts einwandfrei)
Edit: Hätte nicht jemand sagen können dass man fg.Unlock ans Ende schreiben muss?
Neues Problem:
FindAndSetPixel kann man so oft machen wie man will, es kommt nur bis zur hälfte des Bildes bei einem 280x280 Pixel großem Bild
(Der Code ist der Selbe wie oben nur mit fg.Unlock vor Hauptfenster.PictureBox1.Image = fg.Bitmap)
Im Anhang sind Screenshots:
1. Testbild ohne bearbeitung
2. FindAndSetPixel Weiß -> Schwarz (untere Hälfte fehlt)
3. Die Umständliche Methode mit GetPixel und SetPixel ebenfalls weiß -> Schwarz (alles Vollständig)
Nehm ich ein anderes Bild passiert dasselbe.
Eigenartigerweise: Wenn ich nach dem Code mit FindAndSetPixel noch irgendeinen Code schreibe, gehts plötzlich
PS: Nein ich bin nicht verrückt.Dieser Beitrag wurde bereits 10 mal editiert, zuletzt von „Funcoder...“ ()
-
Hallo,
ich suche gerade einen Weg wie ich Zahlenwerte von einem externen Programm auslesen kann und bin dabei auf diesen sehr interessanten Thread gestoßen.
Ich denke jetzt mal kurz laut und würd es super finden wenn ihr mir sagen könntet ob ich Richtig oder Falsch liege.
Meine Frage dazu ist ich kann dieses Programm nicht direkt auf den Frame des externen Programms ansetzen oder?
Ich müsste den Frame als Bild in meinen Zwischenspeicher bringen oder?
Brauch ich ein externes Programm um ein Bild von meinem Frame zu machen?
Danke -
-
-
-
Das macht keinen Unterschied. Wenn du mehrere Aufrufe von FastGraphics::FromBitmap, Bitmap.LockBits usw. machst, spielt es keine Rolle, an welcher Stelle. Auf jeden LockBits-Aufruf muss ein UnlockBits folgen, bevor ein erneuter LockBits-Aufruf eintreten kann. Damit geht folgendes z.B. nicht:
VB.NET-Quellcode
- Public Sub X()
- Dim bmp As New Bitmap(100, 100)
- Dim bd As BitmapData = bmp.LockBits(New Rectangle(Point.Empty, bmp.Size), Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
- Y(bmp)
- bmp.UnlockBits(bd)
- End Sub
- Public Sub Y(ByVal bitmap As Bitmap)
- Dim bd As BitmapData = bitmap.LockBits(New Rectangle(Point.Empty, bmp.Size), Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
- MessageBox.Show(bd.Scan0.ToString())
- bitmap.UnlockBits(bd)
- End Sub
Wie man sieht ruft X LockBits und Y LockBits auf. Da die FastGraphicsLib ebenfalls über LockBits arbeitet, funktioniert das mehrfache Aufrufen natürlich ebenfalls nicht. Gleiches läuft bei einem Zeichenvorgang bei GDI ab, nur dass glaub ich eine ExternalException geschmissen wird.
Gruß
~blaze~ -
Hallo kevin89,
Ich habe die DLL eingebunden. Anscheinend scheint es ein Problem mit dem Stride zu geben. Gibt es eine Lösung für das Problem mit den Dreiecken?
Siehe Post [VB 2010] Schwarze Pixel mit getpixel() zählen sehr langsam
sowie [VB 2010] Schwarze Pixel mit getpixel() zählen sehr langsam -
-
Ist es komplett schwarz ? Abweichung von 1 in irgendeinem Channel könnte es dir versauen.Egal hast die richtige Funktion dafür benutzt.Gruß Mangafreak
-
-
Hallo Kevin89,
vielen Dank für die dll,
die Geschwindigkeitssteigerung ist wirklich super. Ich versuche derzeit ein altes Projekt "Bildmittelung" wieder aufzuleben. Was macht das: Viele Bilder (alle gleiche size und Motiv, mit Stativ o.ä. Aufgenommen) werden mit getPixel in einen array ausgelesen. Die Beispielbilder (Ausschnitte) haben im Original 3264x2448 Pixel. Bei 50-100 Bildern kann das mit default Methoden ewig dauern - ohne schnelle Graphic lib nicht zu machen. Ich habe das Programm schon einmal in java unter netbeans geschrieben und versuche nun mit VB 2010 zumindest an den speed in java ranzukommen. Die bei Industrielle Bildverarbeitung (Demant) erwähnte Skalierung auf Minimum und Maximum soll noch als Option hinzukommen.
Aus den gemittelten Werten für jeden Kanal wird wieder ein Bitmap gemacht. Im Resultat ist das Bildrauschen stark reduziert.
Hier zum Vergleich (links:eines der Originalfotos, rechts statistisch entrauschtes Bild)
Möglicherweise habe ich bei der FastGraphics Methode einen bug entdeckt. Benutze ich FastGraphics.setPixel, bekomme ich immer bei x=0 und y>0 also (ganz links am Bild) eine blaue Linie die so aussieht als ob alle Pixel von x=1 auf x=0 kopiert wurden und blau gefärbt. An der FastGraphics.getPixel Methode liegt es jedenfalls nicht, die werde ich auch weiterhin verwenden.
Hier zum Vergleich (links: Bitmap.setPixel, rechts: FastGraphics.setPixel)
Dim fg AsNew FastGraphics
fg.SetPixel(w,h, FromArgb(rgbs(w, h, R), rgbs(w, h, G), rgbs(w, h, B)))
Es ist zwar schon eine Weile her das Du die dll geposted hast...aber das wäre echt riesig wenn du dir das nochmal ansehen könntest. Sollte Jemand noch eine andere schnelle Methode zum Pixel setzen kennen bin ich für Hinwiese dankbar. Grüsse, emilDieser Beitrag wurde bereits 4 mal editiert, zuletzt von „emil.quast“ ()
-
-
-
Ich habe folgenden code:
VB.NET-Quellcode
- Private Function convert(bmp As Bitmap, ValueR As Integer, ValueG As Integer, ValueB As Integer)
- Dim lb As FastGraphicsLib.FastGraphics = FastGraphicsLib.FastGraphics.FromBitmap(bmp)
- For x As Integer = 0 To bmp.Width - 1
- For y As Integer = 0 To bmp.Height - 1
- Dim col As Color = lb.GetPixel(x, y)
- Dim r2 As Integer = col.R
- Dim b2 As Integer = col.B
- Dim g2 As Integer = col.G
- Dim a2 As Integer = col.A
- r2 = r2 * (ValueR / 255)
- g2 = g2 * (ValueG / 255)
- b2 = b2 * (ValueB / 255)
- Dim col2 As Color = Color.FromArgb(a2, r2, g2, b2)
- lb.SetPixel(x, y, col2) ' <---- ERROR
- lb.Unlock()
- Next y
- Next x
- Return lb.Bitmap
- End Function
ERROR:
AccessViolationException:
Es wurde versucht im geschützten speicher zu lesen oder schreiben. dies ist häufig ein hinweis darauf dass anderer speicher beschädigt ist. -
-
-
Tags
-
Ähnliche Themen
-
Meine 2.5D Engine (alternative? xD)
FreakJNS - - Off-Topic -
Alle schwarzen Pixel transparent machen
TheGameSiders - - Sonstige Problemstellungen -
juli90 - - Sonstige Problemstellungen
-
-
9 Benutzer haben hier geschrieben
- Gast (20)
- kevin89 (7)
- Mangafreak1995 (4)
- Trade (2)
- Chrisber (2)
- ~blaze~ (2)
- nikeee13 (1)
- cpu_johnny (1)
- bla (1)