Frage zu setPixel und Format!

Hallo liebes Forum,

ich möchte mit setPixel ein Bild modifizieren. Folgendes habe ich über die Formate recherchiert:

  1. mit Bild.GetPixel(x,y) bekomme ich eine RGB-Darstellung ala „rrr; ggg; bbb“, jeweils 1-255, Typ Color (?)

  2. mit Bild.GetPixel(x,y).ToARGB bekomme ich eine Integer Variante

  3. mit hex(Bild.GetPixel(x,y).ToARGB) einen Hex-Wert der Form AARRGGBB

Meine Frage: Während ich zu 2) und 3) das entsprechende Gegenstück habe (Bild.SetPixel (x,y).FromARGB(HEX))weiss ich nicht, wie ich die zu 1) ausgelesenen RGB-Werte 1-255 mit SetPixel übergeben kann?
Ich denke an ein Format ala SetPixel(x,y).(RRR,GGG,BBB). Gibt es das?

PS: Ich fände es leichter zu modifizieren, als die hex-Werte.

Danke für Tipps
Gruß Jörg

Hallo liebes Forum,

Hi!

ich möchte mit setPixel ein Bild modifizieren. Folgendes habe
ich über die Formate recherchiert:

  1. mit Bild.GetPixel(x,y) bekomme ich eine RGB-Darstellung ala
    „rrr; ggg; bbb“, jeweils 1-255, Typ Color (?)

Du bekommst die Farbe des Pixels in Form einer Struktur vom Typ Color, da ist noch ein bisschen mehr dran als nur „eine RGB-Darstellung“.

  1. mit Bild.GetPixel(x,y).ToARGB bekomme ich eine Integer
    Variante

Grundsätzlich schon, aber warum die einzelnen Werte wieder auf Zwang zusammenmischen?

  1. mit hex(Bild.GetPixel(x,y).ToARGB) einen Hex-Wert der Form
    AARRGGBB

Ja, aber als String - das nutzt Dir für Berechnungen herzlich wenig.

Meine Frage: Während ich zu 2) und 3) das entsprechende
Gegenstück habe (Bild.SetPixel (x,y).FromARGB(HEX))weiss ich
nicht, wie ich die zu 1) ausgelesenen RGB-Werte 1-255 mit
SetPixel übergeben kann?
Ich denke an ein Format ala SetPixel(x,y).(RRR,GGG,BBB). Gibt
es das?

Genau so bestimmt nicht, das ist doch noch nicht mal gültige Syntax!
Bitmap.SetPixel hat doch diese Signatur:

Public Sub SetPixel ( \_
 x As Integer, \_
 y As Integer, \_
 color As Color \_
)

Du musst also 2 Integer und eine Color reinstecken. Letztere musst Du Dir erst erzeugen, bspw. über:

myBitmap.SetPixel(42, 182, Color.FromARGB(255,0,0))

PS: Ich fände es leichter zu modifizieren, als die hex-Werte.

Danke für Tipps
Gruß Jörg

Gruß,
Martin

Hi Jörg,
zu deinem Glück hab ich vorgestern genau so ein Programm geschrieben. Es liest eine Bitmap ein, prüft jeden Pixel auf seine Colorierung und gibt dann ein Textdokument im selben Ordner aus wo ein genauer Code ala SetPixel ist mit deinen gewünschten RGB (eigentlich sogar ARGB) für jeden Pixel. Den Code kannst du dann in anderen Programmen so reinkopieren. Vieleicht wirst du ja damit schlauer es ist aber eigentlich nicht wirklich kompliziert. Viel spaß damit:

http://web5.c1.ibone.ch/web5f1/PtC_Converter.rar

PS: Der Code ist im Visual Basic 08 Format. Falls du ihn nicht öffnen kannst PN an mich dann schick ich ihn dir als Textdatei.

Gruß
Wingman223

Vielen Dank für die Antwort!

aetPixel(x,y,RGB(a,b,c)) funktioniert, wenn auch langsam.

BEste Grüße, Jörg

Vielen Dank für den Link,
ich schaue es mir gerne an.

Die Variante, die ich jetzt benutze ist die setPixel(x,y,RGB(a,b,c)).

Die ist aber „grottenlangsam“. Wenn ich nur wüßte, wie es mit „machbaren Mitteln“ schneller geht ;o)

Viele Grüße und Dank, Jörg

Hi Jörg,
das Problem liegt ja daran das die zu prüfenden Pixel exponential zur größe des Bildes steigen. Da dauert das natürlich mit Get und Set Pixel ewig. So viel ich aber weiß gibt es noch eine wesentlich schnellere Methode die Pixelfarbe auszulesen da muss man aber ziemlich tief in die API gehen. Hab das auf irgendeinen Seite gefunden aber weiß leider nicht mehr den Link. Wenn ich ihn finde poste ich ihn natürlich.

Gruß
Wingman223

Hallo!
Ja, GetPixel/SetPixel sind zwar ultra-einfach in der Anwendung, aber halt auch langsam.
Wenn Du ein bisschen firmer in den Programmier-Basics bist, kannst Du Dir ja mal diesen Artikel auf Code Project anschauen: http://www.codeproject.com/KB/GDI-plus/pointerlessim…
Ist zwar C#, aber ein bisschen Transferaufwand kann man m.M. nach durchaus investieren…

Gruß,
Martin