2008-11-23 10 views

Antwort

4

Sie können eine Linie mit einer Länge von 1 Pixel an der betreffenden Koordinate zeichnen; das sollte erreichen, was du willst.

13

Quartz ist keine pixelorientierte API und seine Kontexte sind nicht unbedingt Pixelpuffer. Wenn Sie Pixmaps zeichnen möchten, erstellen Sie einen Bitmap-Kontext mit CGBitmapContextCreate(). Sie stellen einen Puffer zur Verfügung, den Sie direkt manipulieren können, und können in einen anderen Kontext kopieren, indem Sie CGImage aus demselben Puffer erstellen und dazu CGImageCreate() verwenden.

21
CGContextFillRect(context, CGRectMake(x,y,1,1)); 
0

ich das gleiche Problem habe - ich finde, die beste Lösung für die letzten ähnlich ist, aber zumindest ist es nicht etwas hinterlassen, das wie ein „Strich“ ... natürlich aussieht, soll sicherstellen, x/y sind beide> 0.

CGContextFillRect (Kontext, CGRectMake (x - 0,5, y - 0,5, 1,0, 1,0));

7

Ich habe einen Punkt (Null-Länge-Linie) zu zeichnen nach dem Setzen der Line-Caps auf kCGLineCapRound. Das Standard-Line-Cap hat keine Länge und kann daher nicht gezeichnet werden.

Das Argument, dass ein Punkt keine Größe hat, ist albern. Die Linien haben keine Breite, aber wir können diese zeichnen (indem wir die "Linienbreite" aus dem Zeichnungszustand verwenden). Ein Punkt sollte genau so gezeichnet werden, und mit unterschiedlichen Linienzahlen glaube ich, dass es das tut.

Vielleicht ist dieses Verhalten neu?

+1

Nein ist es nicht. Ein Punkt ist genau das: Ein einzelner Punkt. Größe ist der Abstand zwischen mindestens einem Punktepaar. Die Linienkappen sind zusätzlich zur Länge der Linie, die Sie zeichnen; im Fall einer runden Kappe ist der Radius die halbe Linienbreite, so dass eine Nulllinie mit runden Kappen bei einer Linienbreite von 1 pt zwei Kappen mit einem Radius von 1/2 pt mit nichts dazwischen zieht und somit einen Kreis von 1 bildet pt Durchmesser. Und nein, dieses Verhalten ist nicht neu: Line-Caps und die meisten anderen Quartz-Dateien kamen mit PostScript aus dem Jahr 1985. –

+4

Ich wollte damit nicht sagen, dass ein Punkt eine Größe hat, nur dass es fehlt Größe ist eine alberne Entschuldigung, um nicht zeichnen zu können. Eine Linie (als ein mathematisches Konzept) hat keine Breite, aber wir können das gut zeichnen. Das Zeichnen einer "Null-Längenlinie" mit runden Kappen bringt einen Punkt auf den Bildschirm mit dem Liniendurchmesser. Die runden Kappen bieten im Wesentlichen eine "Punktdurchmesser" -Einstellung. Wenn jedoch das ursprüngliche Poster speziell die Farbe eines Bildschirmpixels festlegen soll, sollte dies durch Setzen von Werten direkt in einem Bitmap-Kontext und nicht mit den pfadbasierten Zeichenroutinen erfolgen. – Chad

+0

Das ist, was ich gesucht habe! CGContextSetLineWidth (gewünschteWeite); CGContextSetLineCap (UIGraphicsGetCurrentContext(), kCGLineCapRound); Zeichnen Sie dann eine Linie vom Punkt zu sich selbst. – rmp251

6

Zeichnen Sie eine sehr kleine Ellipse/Kreis und füllen Sie es!

CGContextAddEllipseInRect(Context,(CGRectMake (x_dot, y_dot, 3.0, 3.0)); 
CGContextDrawPath(Context, kCGPathFill); 
CGContextStrokePath(Context); 

Ich verwende diesen Code, um einen kleinen Punkt (3x3 Pixel) in einer punktierten Musiknote zu erstellen.

0

swift 3: „Das Argument, dass ein Punkt hat keine Größe albern ist“

UIRectFill(CGRect(x: x, y: y, width: 1, height: 1)) 
Verwandte Themen