2013-04-08 7 views
7

Ich bin in Xamarin entwickeln und würde gerne einen einfachen Kreis mit dem Text "CIRCLE" in ihm zeichnen und dieses Bild in einem UIImageView anzeigen. Das Problem ist, dass der Kreis und der Text sehr verschwommen erscheinen. Ich habe ein bisschen über Subpixel gelesen, aber ich glaube nicht, dass das mein Problem ist.IOS zeichnen ein einfaches Bild unscharf mit Xamarin C#

Hier ist das Bild verschwommen und Code, jemand der Hoffnung, ein paar Ideen hat :)

UIGraphics.BeginImageContext (new SizeF(150,150)); 
var context = UIGraphics.GetCurrentContext(); 

var content = "CIRCLE"; 
var font = UIFont.SystemFontOfSize (16); 

const float width = 150; 
const float height = 150; 

context.SetFillColorWithColor (UIColor.Red.CGColor); 
context.FillEllipseInRect (new RectangleF (0, 0, width, height)); 

var contentString = new NSString (content); 
var contentSize = contentString.StringSize (font); 

var rect = new RectangleF (0, ((height - contentSize.Height)/2) + 0, width, contentSize.Height); 

context.SetFillColorWithColor (UIColor.White.CGColor); 
new NSString (content).DrawString (rect, font, UILineBreakMode.WordWrap, UITextAlignment.Center); 

var image = UIGraphics.GetImageFromCurrentImageContext(); 
imageView.Image = image; 

Blurry Circle

Antwort

12

Der Grund, warum es verschwommen ist, weil es die Größe neu bestimmt wurde. Diese Bitmap ist nicht 150x150 (wie der Kontext, den Sie erstellt haben), sondern 333x317 Pixel.

Es könnte sein, weil imageView Skalierung des Bildes ist (es gibt keinen Quellcode) oder wegen Pixelverdoppelung (für Retina-Displays). Im letzteren Fall, was Sie verwenden möchten, um wirklich ist:

UIGraphics.BeginImageContextWithOptions (size, false, 0); 

, die automatisch mit der rechten Skalierungsfaktor für Retina wird (0 verwenden) (oder nicht) Anzeige - und gestochen scharfe (und überdimensionale nicht) auf allen Arten von Geräten.

+0

Die Pixelverdoppelung für Retina war das Problem und Ihr Vorschlag löste es. Gute Arbeit, danke :) –