Posts by Hoogo

    Irgendwann sind wir nämlich bei der Raumpflegerin, die den ersten Schreibtisch von Bill Gates saubergemacht hat. :D

    Lasst uns des Kerls gedenken, der Grace Hopper geknallt hat.

    Die Gedanken hinter Cobol sind ja "So langweilige Sachen kann eine Maschine viel besser" und "Die Sprache muss so einfach sein, dass auch ungeübte sie verstehen können"

    Also ich mag ja ordered dither. Für Fotos in der Regel nicht so gut, aber für Grafik oder Animationen taugt es mehr.

    Hab diese Seite gefunden, mit vielen Vergleichsbildern und Code dazu.


    Für Grausfufenbilder mit 1 Farbkanal leuchtet das Prinzip schnell ein, einfach nach festem Muster was auf die Helligkeit addieren/abziehen und dann die passendste Farbe suchen. Wie "einfach daraufaddieren" bei 3 Farbkanälen aussehen soll leuchtet mir aber noch nicht ein... Muss ich mal genauer lesen, wie da die Idee ist.

    Vergleiche NIE Farben in RGB!

    Nimm mindestens YUV.

    Weiß nicht...

    Solche Farbräume können ja aus dem RGB-Würfel per Matrix umgerechnet werden. Also nur ein anderes Koordinatensystem im gleichen Farbraum.
    In YCbCr sind die 3 Vektoren nicht nur rechtwinklig, sondern auch noch gleich lang. Der Abstand zweier Farben ist also in beiden Systemen vergleichbar.
    ES SEI DENN, man packt noch einen Faktor auf die beiden Farbwerte. Ich hab's nicht nachgerechnet, scheint bei YUV so zu sein.
    In dem Fall würde ich aber YCbCr nehmen und den Faktor einstellbar machen.

    Der Faktor müsste sich dann als "mehr Helligkeits-Treue" (kleiner Faktor) bis "mehr Farb-Treue" (großer Faktor) auswirken.

    Ich denke, die meisten Algorithmen dürften in 2 Schritten ablaufen.

    - Palette bestimmen

    - Die Pixel umfärben.

    100%ig sicher bin ich aber nicht, die Praxis fehlt,.. Bei manchen Algorithmen kann ich mir auch gut vorstellen, dass das Umfärben der Pixel nicht einfach nur auf dem Abstand zu den Farben der Palette basiert.


    Probier mal das Primitivste aus:

    - Alle Pixel der Reihe nach durchlaufen.

    - Mit Phytagoras den Abstand zu allen Farben der Palette bestimmen, kürzesten Abstand merken.

    - Der gemerkte Paletteneintrag mit dem kürzesten Abstand ist dann der passende.


    Das kenne ich unter dem Namen "beste Farbe" oder "nearest neighbor".

    Vielleicht taugt das für Deinen Zweck schon, oder es hilft Dir, vergleichbares in den anderen Quelltexten zu finden.


    "Fehlerstreuung" wäre dann das nächste Experiment: Die Differenz zwischen eigentlich gebrauchter Farbe und der tatsächlich verwendeten wird gespeichert und auf dem nächsten/den nächsten Pixeln verrechnet. Ab da wird es dann aber interessant, wie genau dieser Fehler verteilt wird. Aber probier einfach erstmal das simple aus.

    Oh ja, der Computer-Flohmarkt um '95 rum, das war genial.

    Ich erinnere mich nicht mehr, wie ich auf die Zeitung gestoßen bin, aber dann hab ich dem nächsten Erscheinungsdatum mehr entgegen gefiebert als ich es je bei der 64er getan hab.


    Ich meine, der 64er war die stärkste Rubrik. Und zu der Zeit hat es sich sogar gelohnt, einen Spin-Off rein für den C64 zu machen, den "Brotkasten life".

    Was waren denn "ernsthafte" C64-Nutzer?
    So richtig Anwendungs-Software wie Textverarbeitung usw im Betrieb, weil man damit Geld macht?

    Oder reichen auch Zocken und Programmieren aus Spaß an der Freude?


    So richtig ernsthaft für die Profi-Anwender und Informatiker war das 64er-Magazin die ersten paar Jahre, ich sag mal 84-86.

    Später richtete es sich ja mehr an die Hobby-Anwender, und davon gab es immer noch genug für ein Magazin.


    Ich erinnere mich, dass ich in den 90ern einen neuen 64er gekauft habe - der alte war halt kaputt, und Kontakte wie heute hatte ich nicht. Ein anderes Gerät hätte mir als Hobbyprogrammierer und C64-Pixel-Schubser einfach keinen Zusatz-Nutzen gebracht, der mir Geld wert gewesen wäre. Für einen Windows-Rechner hätte ich zu der Zeit eh keine Geld gehabt, selbst wenn ich gewollt hätte.

    Wäre es auch auf demh Basic-Zeilen/Befehle direkt in den Assemblercode einfügen...

    8|


    Geht das nur mir so? :gruebel

    Also ich versteh's.
    Normal: Aus Basic ein bisschen Assembler-Unterprogramme aufrufen.
    Schön wäre manchmal: Aus Assembler ein Basic-Unterprogramm aufrufen. Das geht sicher auch jetzt schon, mit irgendwelchen Pointern, Aufruf des Interpreters und noch irgendwelchen Klimmzügen zur Rückkehr ins Assembler-Programm. Aber das könnte man auch runder gestalten.

    FUCKFUCKFUCKFUCK!!!!!!


    Den ganzen Tag in steinaltem Code und uralten Forenbeiträgen gesucht, warum ich von einem Rechner an den FTP komme, vom wichtigen aber nicht.

    Und dann war da ein Leerzeichen am Ende des Servernamens...


    FUCK!

    Das wurde wohl als seltener Fall eingestuft, der für eine Coder-Vergrößerung im ROM nicht dafür stand (meine Theorie).

    Das ganze Basic war doch eine 3-Mann-Show, für die sich Studenten teure Rechenzeit am Uni-Rechner kaufen mussten.

    Die mussten als erste am Markt sein, und es durfte nicht viel kosten. Unter den Bedingungen macht man auch schon mal komische Kompromisse, so manche Falle bemerkt man ja erst beim Programmieren.


    Und davon ab ist das bei 4KB Hauptspeicher auch nicht sooo wild, da werden die Programme vielleicht eine Größe von 100 Zeilen erreichen.

    Mal eine Frage an die Profis hier: Was macht hier Layer1, der bringt ein Dithering rein, aber wie funktioniert er? Das ist ja nicht einfach ein Pixelmuster, sonst wäre das ja in jeder Fläche zu sehen. Kann mich wer aufklären?


    P.s. Ist wohl doch nur ein Pixelmuster mit unterschiedlicher Durchsichtigkeit eingestellt.

    Das könnte dem hier entsprechen:

    http://danfessler.com/blog/hd-index-painting-in-photoshop

    ...aber vielleicht ist es auch nur ein paar fertige Ebenen ein- und ausblenden, damit das YT-Video hübsch ist.


    "...nur ein Pixelmuster mit unterschiedlicher Durchsichtigkeit..." trifft das Prinzip nicht ganz.

    Das eigentliche Bild ist unten und wird in 256 Graustufen mit allen Filtern und Werkzeugen gemalt.

    Ganz oben wird mit Falschfarben dann die C64-Palette ins Spiel gebracht, und mit Posterize Schwellen für die Farbwechsel festgelegt.

    Für das Dither-Muster dazwischen wäre "linear abwedeln / addieren" eigentlich logisch. Das sorgt dann mit passendem Muster dafür, dass Zwischentöne an manchen Stellen über eine Schwelle drübergehieft werden.

    Ich verstehe die Grafik.

    Ich habe drübergezeichnet, was ich meine.

    Links:

    Das Gitter hat 16 waagerechte Linien.

    Die Punkte, die Du ausgerechnet und mit einer Linie verbunden hast, finden sich immer genau auf diesen Linien.

    Gelb/Rot sind die Bereiche, in denen das Runden zu diesen Linien wirkt. Das ist das, was ich "Streifen" nenne.

    Oberster und unterster Streifen sind halb so breit, dafür sind die 14 übrigen etwas breiter.


    Rechts:

    Das Gitter hat 16 Zwischenräume (also 17 Linien).

    Die Zuordnung ist nicht zu Linien, sondern zu diesen Streifen.

    Wenn ich für diese Streifen einen konkreten Wert geben müsste, dann wäre das der Durchschnittswert.

    Für diesen Durchschnittswert habe ich die schwarzen Punkte eingezeichnet, die oft weit von der roten Linie entfernt sind.

    Das ergibt sich recht einfach, wenn man unsigned rechnet und die Null unten ist.

    Abrunden oder die unteren 4 Bits löschen.

    Dann noch 8 addieren, damit die Punkte nicht am Rand, sondern in der Mitte der Streifen liegen.


    Frag nicht, wie man das in Audacity macht...

    Ah, Du setzt die 0 in die Mitte der Kurve, während ich die Null am unteren Ende der Kurve sehe.

    Ich hab auch mal ne Zeichnung gemacht, was ich meine:

    Die Kurve ist so ausgesteuert, dass sie die Werte von 0 bis 7.999 füllt.

    Dabei beachte ich gar nicht so sehr den genauen Zahlenwert, der sich beim Speichern und Abspielen ergibt.

    Mein Fokus ist mehr, dass sich viele Werte aus der Ursprungskurve später einen einzigen Wert Teilen müssen.

    Darum habe ich diese Streifen von gleicher Breite über die Kurve gelegt und mich nicht weiter drum geschert, welche Lautstärke später beim Abspielen das eigentlich bedeutet. "Zufällig" ergibt Abrunden bei diesem Koordinatensystem die richtige Zuordnung zu Streifen.


    Mit der 0 in der Mitte und dem kaufmännischen (??) Runden bekommst Du auch eine Zuordnung zu gleich breiten Streifen. Allerdings ergibt das eine ungerade Zahl von Streifen, was am C64 ziemlich Schade ist.


    Mein Vorschlag oben "...sondern im Ergebnis alle 16 Samplewerte gleich häufig vorkommen..." würde im Endergebnis den Sinus aus dem Input zu einem Dreieck im Output verformen. Das dürfte den Klang schon verändern, aber vielleicht auch mehr hohe Frequenzen rüberretten.

    4-bit ;) Wieso abrunden? Wieso nicht nearest-neighbor, e.g. kaufmännisch runden? Sollte das nicht weniger quantization noise geben, weil quantisierte kurve näher an der soll-kurve?

    Ich denke, dass kaufmännisch Runden nicht gut ist.

    - Letztlich sollen 16 "Streifen". über die Kurve gelegt werden.

    - Nur Zahlen von 0 bis 0,5 werden zu 0 gerundet, der Streifen 0 wäre sehr schmal.

    - Auf der anderen Seite würde alles von 14,5 bid 15,999 zu 15 gerundet, der Streifen 15 wäre sehr breit.

    - Durch Abrunden bekommt man 16 gleich streife Breiten, in denen die Samplewerte zusammengefasst werden.


    Letztlich ist kaufmännisches Runden ja auch nur normales abrunden, nachdem man 0,5 addiert hat. Für echte Zahlen ne prima Sache, aber für das Nachbilden einer Kurve? Ich denke, die konkreten Zahlen werden da nicht so viel Bedeutung haben. Bisschen vorher an der Lautstärke gedreht, und die Zahlen sind andere.


    2 spontane Ideen, falls Du Bock auf Experimente hast:

    - Klingt es vielleicht besser, wenn die "Streifen" über der Samplekurve gar nicht gleich breit sind, sondern im Ergebnis alle 16 Samplewerte gleich häufig vorkommen? Kenne ich im grafischen Bereich als "Histogramm equalisieren". Wenn Du also 16.000 Samples hast, dann nimm solange $00, $01, $02..., bis Du 1000 erreicht hast. Die werden dann alle zu $0.

    - Markiere vorher lokale Minima und Maxima. Die einen Abrunden, die anderen Aufrunden.

    - Die beiden Versuche lassen sich auch kombinieren: Erst die Minma $00, dann die normalen $00, dann die Maxima $00, dann die Minima $01... bis 1000 beisammen sind.

    obwohl es bekloppt wäre, wenn audacity das nicht in der downsampling funktion inbegriffen bereits optimal täte

    Meine Google-Treffer sagen, dass Audacity einen guten Filter beim Downsamplen einsetzt.
    Dürfte also eine gute Idee sein, auf einen Extra-Tiefpass vorher zu verzichten.

    "Serious Sam 2nd encounter".

    Als es "Serious Sam" letztens umsonst gab, hab ich für ein paar Cent auch noch den zweiten Teil hinzugenommen.


    Der erste Teil war hirnloses Ballern "seriös", wie Duke Nukem ohne Witz. Aber doch arg übertrieben "seriös" und damit doch witzig.

    Der zweite Teil versteckt zwischen dem normalen Ballern einiges an Blödeleien, die vollkommen aus der Story fallen.

    Kein Super-Spiel, aber für die paar Kröten doch eine spaßige Unterhaltung.


    "Goat Simulator" empfiehlt sich, wenn man mal wieder was völlig absurdes braucht.