Du bist nicht angemeldet.

Werbeanzeige

Beiträge: 1 239

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 239

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 188

Wohnort: Wickede

Beruf: Student

  • 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