Path: csiph.com!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Stefan Reuther Newsgroups: de.comp.lang.iso-c++ Subject: Re: Selbstgestrickter Floyd-Steinberg-Filter sieht seltsam aus... Date: Sun, 12 Feb 2017 11:00:01 +0100 Organization: A noiseless patient Spider Lines: 32 Sender: "Moderation de.comp.lang.iso-c++" Approved: White-List Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: mx02.eternal-september.org; posting-host="25133f2e23d3850502f89c387effa84c"; logging-data="8322"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19YqQgc6alQnQdDoOUcdcH+" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.0 Hamster/2.1.0.1538 Xref: csiph.com de.comp.lang.iso-c++:2019 Am 11.02.2017 um 14:52 schrieb Jörg "Yadgar" Bleimann: > dist.red = t0.red - closest.red; > dist.green = t0.green - closest.green; > dist.blue = t0.blue - closest.blue; > if (t1.red > -1) > { > img[r].at(c+1).get_all(triple); > newred = triple.red + dist.red*0.4375; > newgreen = triple.green + dist.green*0.4375; > newblue = triple.blue + dist.blue*0.4375; > img[r].at(c+1).set_all(mround(newred), mround(newgreen), > mround(newblue)); > } [...] > Das Programm kompiliert problemlos (bis auf ein paar Warnungen wegen nur > in C++11 verfügbarer Funktionen), es gibt auch keinen Laufzeitfehler... > aber wenn ich mir die gerasterte Bilddatei (von RGB nach > 1-bit-Schwarzweiß) ansehe, frage ich mich, was da falsch gelaufen ist - > wie Floyd-Steinberg-Schwarzweiß z. B. in GIMP sieht es nämlich nicht aus! Das war jetzt ziemlich viel Code, aber ein entscheidender Teil fehlt: wie ist denn die rgb-Klasse definiert? Da "meine" RGB-Klassen eigentlich immer uint8_t-Member haben, vermute ich in dem oben zitierten Code sowas wie unsigned-Überläufe. Ansonsten: kleines Bild (3x3?) nehmen, Code großräumig verprinten und per Hand nachrechnen. Debuggen halt... Und nicht vergessen, das Ergebnis hinterher als Unittest abzuspeichern :) Stefan