2013-04-08 14 views
7

Sto sviluppando in Xamarin e vorrei disegnare un cerchio semplice con il testo "CERCHIO" al suo interno e visualizzare quell'immagine in UIImageView. Il problema è che il cerchio e il testo appaiono molto sfocati. Ho letto un po 'di subpixel ma non penso che sia il mio problema.IOS che disegna un'immagine semplice risulta sfocata usando Xamarin C#

Ecco l'immagine sfocata e il codice, sperando che qualcuno ha qualche idea :)

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

risposta

12

Il motivo per cui è sfocata è perché è stato ridimensionato. Quella bitmap non è 150x150 (come il contesto che hai creato), è 333x317 pixel.

Potrebbe essere dovuto al fatto che imageView sta ridimensionando l'immagine (non c'è codice sorgente) o a causa del raddoppiamento dei pixel (per i display retina). In quest'ultimo caso ciò che si vuole veramente utilizzare è:

UIGraphics.BeginImageContextWithOptions (size, false, 0); 

che (usando 0) utilizzare automagically il diritto fattore di scala per la retina (o meno) di visualizzazione - e guardare croccante (e non di grandi dimensioni) su tutti i tipi di dispositivi.

+0

Il pixel che si raddoppia per retina è stato il problema e il tuo suggerimento è stato risolto. Buon lavoro, grazie :) –