Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

31

20.03.2016, 16:29

Du solltest die Werte im Double Format zusammenmischen und erst dann in Ganzzahlen umwandeln.
Die Logik des Mischcods verstehe ich nicht ganz.
Wieso mischt du die Werte nicht einfach Abhänig ihrer Größe wie von mir vorgeschlagen?
double finalGray = gray128 / 4.0 + gray64mix / 2.0 + gray32mix / 1.0;

32

20.03.2016, 16:46

@SpieleProgrammierer: Du meinst das doch so oder?:

C#-Quelltext

1
2
3
4
5
  double finalGray = gray128 / 4.0 + gray64mix / 2.0 + gray32mix / 1.0;
  int gray = DoubleToByte(finalGray);
  bmp.SetPixel(x, y, Color.FromArgb((byte)gray,
                                    (byte)gray,
                                    (byte)gray));

Nur ist jetzt das Problem das da was sehr komisches rauskommt:

(Link)

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

33

20.03.2016, 17:08

Da ist wohl ein Bug in DoubleToByte.

34

20.03.2016, 17:17

Das ist die DoubleToByte-Funktion:

C#-Quelltext

1
2
3
4
private byte DoubleToByte(double rate)
{
     return (byte)(rate * 255);
}


Der Sinn dieser Funktion ist es einen Double der zwischen 0.0 und 1.0 liegt in einen Byte der zwischen 0 und 255 liegt zu konvertieren.

35

20.03.2016, 17:50

Fast geschafft

Ich habe eben herausgefunden wie man diese komischen Stellen entfernen kann. (Ich habe jetzt auch wieder die Ebenen 16, 8 und 4 hinzugefügt):

ALTER CODE:

C#-Quelltext

1
2
double finalGray = gray128mix / 32.0 + gray64mix / 16.0 + gray32mix / 8.0 + gray16mix / 4.0 + gray8mix / 2.0 + gray4mix / 1.0;
int gray = DoubleToByte(finalGray);


NEUER CODE:

C#-Quelltext

1
2
3
double finalGray = gray128mix / 32.0 + gray64mix / 16.0 + gray32mix / 8.0 + gray16mix / 4.0 + gray8mix / 2.0 + gray4mix / 1.0;
finalGray *= 0.5;
int gray = DoubleToByte(finalGray);


Das Ergebnis sieht so aus (links mein Effekt, rechts der Effekt von Paint.NET)

(Link)


Wie man sehen kann sieht mein Effekt schon ziemlich gut aus kann aber noch verbessert werden. Habt ihr vielleicht noch Vorschläge was man am Code verbessern könnte?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

36

21.03.2016, 14:28

Du hattest ja bereits nach Verberrerungsvorschlägen zum Code gefragt. Da solltest du dann auch ein wenig abwarten. Es bringt nichts 3 Stunden später, bzw 20 Stunden später noch mal das selbe zu Fragen. Lass den Leuten Zeit.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

37

21.03.2016, 14:36

Da hast du auch irgendwie recht

Werbeanzeige