2013-04-08 24 views
7

Pracuję w Xamarin i chciałbym narysować prosty okrąg z tekstem "CIRCLE" wewnątrz i wyświetlić ten obraz w UIImageView. Problem polega na tym, że okrąg i tekst wydają się bardzo rozmyte. Czytałem trochę o subpikselach, ale nie sądzę, że to mój problem.Rysowanie przez IOS prosty obraz okazuje się rozmazane przy użyciu Xamarin C#

Oto rozmyty obraz i kod z nadzieją, ktoś ma jakieś pomysły :)

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

Odpowiedz

12

Powodem jest to rozmazane, ponieważ był zmieniany. Ta bitmapa nie ma rozmiaru 150 x 150 (tak jak utworzony kontekst), ma 333 x 320 pikseli.

Może to być spowodowane tym, że imageView skaluje obraz (nie ma kodu źródłowego) lub z powodu podwojenia pikseli (w przypadku wyświetlaczy siatkówki). W tym ostatnim przypadku, co naprawdę chcesz użyć jest:

UIGraphics.BeginImageContextWithOptions (size, false, 0); 

które (używając 0) automagicznie używać prawo współczynnik skalowania do siatkówki (lub nie) Wyświetlacz - i wyglądać ostry (a nie przewymiarowane) na wszystkich rodzajach urządzeń.

+0

Podwojenie piksela na siatkówkę było problemem i Twoja sugestia go rozwiązała. Dobra robota, dziękuję :) –