Farbcodes/Farbberechnungen (aufhellen, invertieren, mehr kontrast, ...)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Farbcodes/Farbberechnungen (aufhellen, invertieren, mehr kontrast, ...)

    Hallo,
    weis einer von euch wo es Beispiele oder ein Tut gibt für Farbberechnung, weil ich will zum beisoiel was invertieren (nicht nur auch anderes) und da hab ich so gemacht:

    GML-Quellcode

    1. CurrentPixel.R=(byte)(255-CurrentPixel.R);
    2. CurrentPixel.G=(byte)(255-CurrentPixel.G);
    3. CurrentPixel.B=(byte)(255-CurrentPixel.B);
    Habs jetzt in einen gml tag gesetzt is aber c#.

    das funktioniert auch gut ausser man setzt antialishing ein dann kommt bei den halbtransparenten pixeln kakke raus.
    (das alles hat nichts mit dem gm zu tun, sondern mit pdn & codelab.dll)

    Deshalb wollt ich nachdem google nur **** ausgespuckt hat fragen ob einer von euch ein gutes tut/oder kommentierte beispiele kennt?!

    Thx im vorraus!
    Mfg Whiterock
  • du hast mich glaub ich nicht verstanden :S
    ich kenne die funktionen und habe auch geschrieben das es nicht fürn gm is, ich will nur wissen wie man mit den rgb werten spielen soll wenn man etwas invertieren möchte oder mehr kontrast aufbauen will, ...
  • Ich mache das immer folgendermaßen:

    1. Haust dein Bild in deine Wunschdatenstruckur. (am besten 3 grids (3 für jeden rgb/hsv kanal) oder ultimativ gmc.yoyogames.com/index.php?showtopic=431506);
    2. Modifizierst du dann diese Daten mit den Algorithmen die du gerade brauchst.
    3. Packst alles wieder Pixel für Pixel in eine Surface.

    Beachte: Schritt 1 und 3 ziehen unglaublich Performance!

    zb:

    GML-Quellcode

    1. // schritt 1
    2. data_r = ds_grid_create(width,height);
    3. data_g = ds_grid_create(width,height);
    4. data_b = ds_grid_create(width,height);
    5. for (x=0;x<width;x+=1) {
    6. for (y=0;y<height;y+=1) {
    7. c = surface_getpixel(input,x,y)
    8. ds_grid_set(data_r,x,y,color_get_red(c));
    9. ds_grid_set(data_g,x,y,color_get_green(c));
    10. ds_grid_set(data_b,x,y,color_get_blue(c));
    11. }
    12. }
    13. // schritt 2
    14. for (x=0;x<width;x+=1) {
    15. for (y=0;y<height;y+=1) {
    16. // hier deine algos, zb die übersetze version von deinen c# schnippel
    17. }
    18. }
    19. // schritt 3
    20. output = surface_create(width,height);
    21. surface_set_target(output);
    22. for (x=0;x<width;x+=1) {
    23. for (y=0;y<height;y+=1) {
    24. draw_point_color(x,y, make_color_rgb(ds_grid_get(data_r,x,y), ds_grid_get(data_g,x,y), ds_grid_get(data_b,x,y) ));
    25. }
    26. }
    27. surface_reset_target();
    Alles anzeigen


    Aber wie gesagt: wenn du aufwendigere Sachen anstellst, und Grafiken von vielen 100x100 px, bist du ganz schnell bei 10-20 Sekunden Berechnungszeit.

    MfG SDX

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von SDX ()

  • danke mal (würde surface_getpixel dann eh mit ner dll ersetzen, für performance), nur wäre meine frage gewesen wo her man die "algos" (algorithmen) kriegt 8o

    Edit: ist draw_point performance fressend?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von whiterock ()

  • Die Algos bekommst du überall her. Zb ein box blur script wäre

    GML-Quellcode

    1. ds_grid_set(data_r,x,y,ds_grid_get_disk_mean(data_r,x,y,1));
    2. ds_grid_set(data_g,x,y,ds_grid_get_disk_mean(data_g,x,y,1));
    3. ds_grid_set(data_b,x,y,ds_grid_get_disk_mean(data_b,x,y,1));


    Ein Invertscript (dafür brauch man nicht mal irgendwo nachschlagen)

    GML-Quellcode

    1. ds_grid_set(data_r,x,y,-ds_grid_get(data_r,x,y)+255);
    2. ds_grid_set(data_g,x,y,-ds_grid_get(data_g,x,y)+255);
    3. ds_grid_set(data_b,x,y,-ds_grid_get(data_b,x,y)+255);


    MfG SDX
  • was muss ich bei google zum beispiel eingeben? (einfach farb algorithmen ergibt nix nur lauter digital kamera werbung :rolleyes: )

    P.s.: Ich möchte auch betonen das es nicht für den gm ist. c# verwendet auch alpha werte deswegen geht dein invertscript bei antialiashing dort auch nur mäßig ( es sieht kakke aus ). Könnte mir einfach jemand ein passenden Suchbegriff geben, ich bin eh nicht soooo faul :D .

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von whiterock ()

  • Die verschiedenen Blend Modes sind auch sehr hilfreich. Zum Invertieren des Bildes kannst du folgende Vorgehensweise benutzen:

    GML-Quellcode

    1. // zuerst Blend Mode festlegen:
    2. draw_set_blend_mode_ext(bm_inv_dest_color, bm_zero);
    3. // weiße Fläche über das Bild zeichnen, z.B. mit:
    4. draw_rectangle(...);
    5. // Blend Mode zurücksetzen (auf "normales Zeichnen"):
    6. draw_set_blend_mode(bm_normal);

    Verschleudert wesentlich weniger Performance als alle Pixel- und Surface-Experimente.

    Ich hab vor einiger Zeit mal ein Tool geschrieben. Damit kannst du mit den Blend Modes rumprobieren: BM Help Tool
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • cool, nur kenne ich mich mit blend modes nicht so wiaklich aus, und es ist auch nicht unbegrenzt...Also wenn sich ein Bild eindrehen soll oder so dann bringen Blendmodes nicht viel, aber für einen kleinen Effekt nebenbei ;)

    Was muss ich bei Google nun als Suchbegriff ungefähr eingeben um diese "die bekommste überall her" algos zu finden?
  • Irgendwie scheint hier niemand so recht mitzubekommen, dass es sich nicht um den GM , sondern um ein Paint.Net Plugin in C# handelt...

    Hier ein eleganter Weg, Bilder zu manipulieren, inklusive ein paar Algorithmen:
    atalasoft.com/cs/blogs/steveha…c-lambda-expressions.aspx
    Benutzt Lambdas, eine Art anonyme Inline-Funktionen .

    Edit: Du kannst das wohl aber nicht einfach so verwenden, da das noch irgendeine 3rd Party Library verwendet.
    Aber prinzipiell könntest du das Konzept mit den Lambdas und die Algorithmen selber implementieren.
    "das war meine letzte flamewar PM an dich ."
  • Danke erstmal, schön das es einer mitkriegt :rolleyes: :P
    Bin natürlich noch immer offen für andre algos usw.

    Edit:Ich muss auch ganz ehrlich sagen ohne Highlighting sind mir die algorithmen ein bisschen zu schwer (der letzte und vorletzte).

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von whiterock ()

  • blubberblub schrieb:

    Irgendwie scheint hier niemand so recht mitzubekommen, dass es sich nicht um den GM , sondern um ein Paint.Net Plugin in C# handelt...

    Blend Modes finden überall Verwendung, sowohl in GML und anderen Sprachen, als auch in Grafikprogrammen.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Schon Schon aber ich will ja nicht nur mit blendmodes herum experimentieren, ich suche grad ganz konkret algorithmen zum schaffen solcher bilder oder anderer, ist nur ein beispiel:

    War ursprünglich ein Art fadenkreuz (zwei linien, diagonal)
    :) Kennt wer algos für solche effekte oder weis wer mit welchen tags ich suchen soll? :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von whiterock ()

  • Wieso nimmst du nicht einfach Gimp? Ist auch kostenlos und bietet schon jede Menge Effekte. Außerdem lässt es sich problemlos durch Scripts, Brushes usw. erweitern, die du massenhaft im Internet findest.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Er will ja selber ein Plugin schreiben, um Paint.Net zu erweitern...
    Ich kenn auch keine Algorithmen, aber vielleicht findest du ja n open source image manipulation library, von der du dir die algorithmen abschaun kannst?
    "das war meine letzte flamewar PM an dich ."
  • alles durchforsten und nach keywords wie etwa "open", "source", "plugin" oder whatever suchen..
    besser is halt trotzdem, erst zu wissen, welchen effekt du erzielen willst.
    "das war meine letzte flamewar PM an dich ."
  • sachen wie kontrast, helligkeit (weisz (england nix scharfes s) ich schon, siehe unten), und wie man mithilfe der alpha und ner farben ne farbe berechnet (siehe unten)

    1.k.a. weis es wer?
    2.r g b werte alle um das selbe erhoehen\erniedrigen
    3.also ich meine black mit a0 wird weisz - black mit a127.5 wird grau
    a = alpha\transparenz
    kennt wer ne progcommunity die sich auch mit dem thema beschaeftigt? (in c# vll)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von whiterock ()