2013-06-19 5 views
0

Я рисую что-то касание пальцем с использованием растрового изображения.Рисование растрового изображения на экран размыто ???

Сначала я рисую линию для растрового изображения.

Затем нарисуйте растровое изображение на экране.

Но вопрос заключается в том, что линии размыты.

Ниже приведено сравнение.

enter image description here

enter image description here

picture1 непосредственно рисунок на экран. picture2 использует растровое изображение. Вот мой код:

- (BOOL)CreateBitmapContext:(int)pixelsWide High:(int)pixelsHight 
{ 
CGColorSpaceRef colorSpace; 
void *   bitmapData; 
int   bitmapByteCount; 
int   bitMapBytesPerRow; 

bitMapBytesPerRow = (pixelsWide * 4); 
bitmapByteCount = (bitMapBytesPerRow * pixelsHight); 

colorSpace = CGColorSpaceCreateDeviceRGB(); 
bitmapData = malloc(bitmapByteCount); 
if (bitmapData == NULL) 
{ 
    CGColorSpaceRelease(colorSpace); 
    return NO; 
} 
tempContext = CGBitmapContextCreate(bitmapData, pixelsWide, pixelsHight, 8, bitMapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); 



if (tempContext == NULL) 
{ 
    CGColorSpaceRelease(colorSpace); 
    free(bitmapData); 
    return NO; 
} 
CGColorSpaceRelease(colorSpace); 
return YES; 
} 


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
UITouch *touch = [touches anyObject]; 
CGPoint p = [touch locationInView:self]; 
[tool setFirstPoint:p]; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
UITouch *touch = [touches anyObject]; 
CGPoint p = [touch locationInView:self]; 
CGPoint previous = [touch previousLocationInView:self]; 
[tool moveFromPoint:previous toPoint:p]; 
[tool draw:tempContext]; 
[self setNeedsDisplay]; 
} 


- (void)drawRect:(CGRect)rect 
{ 
// Drawing code 
CGContextRef myContext = UIGraphicsGetCurrentContext(); 

myImage = CGBitmapContextCreateImage (tempContext);// 5 
CGContextDrawImage(myContext, rect, myImage);// 6 
} 

Так что случилось с ним ??

Кто-нибудь?

+1

Вы должны использовать двойную высоту и ширину для вашего контекста на устройствах сетчатки. – yinkou

ответ

1

Возможно, на вашем устройстве имеется сетчатый экран. На этих экранах вам нужно выделить растровое изображение с тем же разрешением экрана на экране, или оно будет немного размытым, когда вы его отложите. Сбивая с толку часть, если вы просто делаете [[UIScreen mainScreen] bounds], чтобы определить разрешение пикселей, то ваше изображение будет половиной необходимого разрешения пикселей. Это связано с тем, что значения границ представляют собой не зависящие от плотности точки, а не пиксели. Вы компенсируете это, также прочитав [[UIScreen mainscreen] scale], который вернет 2.0 на устройства сетчатки.

+0

Да, вы должны умножить значения, которые вы передаете в '- (BOOL) CreateBitmapContext: (int) pixelsWide High: (int) pixelsHight' by' [[UIScreen mainScreen] scale] ' – Idles

+0

, но когда я набираю код следующим образом: 'float scaleFactor = [[UIScreen mainScreen]]; myBitmapContext = CGBitmapContextCreate (bitmapData, size.width, size.height, 8, bitmapBytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast); , если (Сетчатка) { CGContextScaleCTM (myBitmapContext, scaleFactor, scaleFactor); } ' По-прежнему отображается неверно – Domlin

+0

Не устанавливайте масштаб контекста, изменяя размер создаваемого контекста. Aka, безусловно, умножается на scaleFactor в CGBitmapContextCreate (масштаб 1,0 на экранах без сетчатки, поэтому вам это не нужно, если-check). – Idles

Смежные вопросы