Ich arbeite in einer App, in der ich Histogramm von jedem eingefügten Bild zeichnen muss. Ich kann Histogramm erfolgreich zeichnen, aber es ist nicht so scharf wie in PREVIEW in Mac OS.
Da der Code zu groß ist, habe ich ihn auf GitHub hochgeladen Klicken Sie hier um Herunterladen
Die RGB-Werte werden in
eingelesen %Vor%Ich habe Werte in c-Array-Variablen gespeichert, fltR, fltG, fltB.
Ich habe eine Klasse ClsDrawPoint es hat Mitglieder
%Vor%Bereitete dann ein Array vor, das Objekte von ClsDrawPoint mit dem Index fltR [] als X-Wert und Wert für diesen Index als Y-Wert enthält.
Das Arrayist vorbereitet und das Diagramm wird in
gezeichnet %Vor%Methode
Sie können das Ergebnis sehen
Derzeit ist es nicht so genau wie in PREVIEW in Mac für das gleiche Bild. Sie können ein Bild in der PREVIEW-App in Mac öffnen und in Tools & gt; AdjustColor können Sie das Histogramm dieses Bildes sehen. Ich denke, wenn mein Graph akkratiert, wird es schärfer sein. Bitte überprüfen Sie meinen Code und schlagen Sie mir vor, wenn Sie es dennoch finden, um es genauer zu machen.
Ich habe Ihre Stichprobe aus Github gezogen und festgestellt, dass Ihre drawRect:
-Methode in ClsDraw
Linien zeichnet, die ein Pixel breit sind. Striche sind auf der Linie zentriert und mit einer Breite von 1 wird der Strich in Halbpixel aufgeteilt, wodurch Anti-Aliasing eingeführt wird.
Ich habe Ihre horizontalen Offsets um ein halbes Pixel verschoben und das Rendering sieht scharf aus. Ich habe mich nicht mit vertikalen Offsets herumgeschlagen, aber um sie scharf zu machen, müsste man sie runden und sie dann auf einen Halb-Pixel-Offset verschieben. Ich habe nur die folgende Änderung vorgenommen:
%Vor% Beachten Sie die neue OFFSET_X
und die Einführung von adjustedPoint
.
Sie können auch eine CGPoint
-Stellung in eine NSValue
-Instanz für Ihre Punkte anstelle der benutzerdefinierten Klasse ClsDrawPoint
verwenden, es sei denn, Sie möchten zusätzliches Verhalten oder zusätzliche Eigenschaften hinzufügen. Mehr Details verfügbar hier .