绘制位图到屏幕是模糊的???

时间:2013-06-19 08:10:07

标签: ios bitmap core-graphics

我画一些手指触摸使用位图。

首先我将线条绘制到位图。

然后将位图绘制到屏幕上。

但问题是使用这种方式,线条模糊。

以下是比较。

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 个答案:

答案 0 :(得分:1)

您的设备可能有视网膜屏幕。在这些屏幕上,您需要分配一个与屏幕相同的像素分辨率的位图,否则当您将其渲染回来时会有点模糊。令人困惑的部分是,如果您只是[[UIScreen mainScreen] bounds]来确定像素分辨率,那么您的图像将是所需像素分辨率的一半。这是因为边界值表示与密度无关的点,而不是像素。您还可以通过阅读[[UIScreen mainscreen] scale]来补偿这一点,2.0会在视网膜设备上返回{{1}}。