Hallo Leute,
ich bin gerade dabei ein kleines Programm zu schreiben welches mir eine Vorschau von Bildern erstellt.
So weit so gut, das Vorschaubild ist nix Anderes als verschieden große Punkte, welche ich anhand des Schwarzwertes errechne.
Dabei arbeite ich mit transparenten Punkten. z.B. ARGB(100,150,150,150) welche ich auf ein Transparentes Bitmap hinterlege um nachträglich beliebige Hintergründe einfügen zu können.
Nun möchte ich aber auch die Pixelfarbe der Punkte ändern. Mit der Bitmap.getpixel- und .setpixel Methode krieg ich das auch hin, nur mit dem FastGraphicsLib leider nicht, was ich aber möchte, da es doch um ein vielfaches schneller ist.
In meinem Code habe ich beide Routinen zusammengebracht um diese vergleichen zu können.
Hoffe ihr könnt mir ssagen, was ich falsch mache.
Habe ein Bild angehängt, dann seht ihr was ich meine. Ich möchte die Punkte im Vordergrund zum Beispiel rot einfärben. Der Rest des Bildes ist Transparent, das Hintergrundbild liegt auf der Form.
ich bin gerade dabei ein kleines Programm zu schreiben welches mir eine Vorschau von Bildern erstellt.
So weit so gut, das Vorschaubild ist nix Anderes als verschieden große Punkte, welche ich anhand des Schwarzwertes errechne.
Dabei arbeite ich mit transparenten Punkten. z.B. ARGB(100,150,150,150) welche ich auf ein Transparentes Bitmap hinterlege um nachträglich beliebige Hintergründe einfügen zu können.
Nun möchte ich aber auch die Pixelfarbe der Punkte ändern. Mit der Bitmap.getpixel- und .setpixel Methode krieg ich das auch hin, nur mit dem FastGraphicsLib leider nicht, was ich aber möchte, da es doch um ein vielfaches schneller ist.
In meinem Code habe ich beide Routinen zusammengebracht um diese vergleichen zu können.
Hoffe ihr könnt mir ssagen, was ich falsch mache.
VB.NET-Quellcode
- Public Function PixelRePaint(ByVal NewColor As Color) As Bitmap
- Dim Testmode As Boolean = False
- Dim bmp As Bitmap 'Vergleichstest
- bmp = New Bitmap(PictureBox1.BackgroundImage) 'Vergleichstest
- Dim fg As FastGraphicsLib.FastGraphics = FastGraphicsLib.FastGraphics.FromBitmap(PictureBox1.BackgroundImage)
- For x = 0 To fg.Bitmap.Width - 1
- For y = 0 To fg.Bitmap.Height - 1
- Dim c As New Color
- c = fg.GetPixel(x, y)
- Dim ct As New Color 'Vergleichstest
- ct = bmp.GetPixel(x, y) 'Vergleichstest
- ' If ct.A <> c.A Then Stop 'Vergleichstest
- ' If ct.A = 100 Then Stop 'Vergleichstest
- If c.A > 0 Then
- fg.SetPixel(x, y, System.Drawing.Color.FromArgb(c.A, NewColor.R, NewColor.G, NewColor.B))
- End If
- If ct.A > 0 And Testmode = True Then 'Vergleichstest
- bmp.SetPixel(x, y, System.Drawing.Color.FromArgb(ct.A, NewColor.R, NewColor.G, NewColor.B))
- End If
- Next
- Next
- If Testmode = True Then
- Return bmp 'Vergleichstest
- Else
- fg.Unlock()
- Return fg.Bitmap
- End If
- End Function
Habe ein Bild angehängt, dann seht ihr was ich meine. Ich möchte die Punkte im Vordergrund zum Beispiel rot einfärben. Der Rest des Bildes ist Transparent, das Hintergrundbild liegt auf der Form.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Siestaeg“ ()