我试图保存位图上下文,并将其分配给另一个位图上下文,以便以后能够绘制它。但我不能百分之百确定该怎么做。是否可以像下面的例子那样分配它?
//paint.h
CGContextRef cachecontext;
CGContextRef cachecontexttoSaveOn;
//paint.m
-(void)copybitmap{
cachecontexttoSaveOn = cachecontext;
}
- (BOOL) initContext:(CGSize)size {
scaleFactor = [[UIScreen mainScreen] scale];
// scaleFactor = 1;
//non-retina
// scalefactor = 2; retina
int bitmapBytesPerRow;
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = (size.width * 4*scaleFactor);
bitmapByteCount = (bitmapBytesPerRow * (size.height*scaleFactor));
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
cacheBitmap = malloc( bitmapByteCount );
smallbyte = 100 * 4*scaleFactor * 100 *scaleFactor;
copiedBitmap = malloc(smallbyte);
if (cacheBitmap == NULL){
return NO;
}
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little;
colorSpace = CGColorSpaceCreateDeviceRGB();
cacheContext = CGBitmapContextCreate (cacheBitmap, size.width*scaleFactor, size.height *scaleFactor, 8, bitmapBytesPerRow, colorSpace, bitmapInfo);
CGContextScaleCTM(cacheContext, scaleFactor, scaleFactor);
CGColorSpaceRelease(colorSpace);
CGContextSetRGBFillColor(cacheContext, 0, 0, 0, 0.0);
CGContextFillRect(cacheContext, (CGRect){CGPointZero, CGSizeMake(size.height*scaleFactor, size.width*scaleFactor)});
// path = CGPathCreateMutable();
return YES;
}发布于 2015-01-03 21:53:59
在您的代码中,您不是在复制上下文,而是简单地创建对它的新引用,因此在拷贝位图之后,两个变量将指向同一个对象,而对其中一个的任何更改都会影响另一个.
不幸的是,没有直接的方法将一个CGBitmapContext复制到另一个CGBitmapContext中,因此您需要手动创建第二个参数与第一个参数相同的备份数据,以及一个带有memcpy的备份数据副本(如果您有对它的引用,则直接从cacheBitmap创建,或者从CGBitmapContext获得它)。
https://stackoverflow.com/questions/27759719
复制相似问题