首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何复制CGBitmapcontext?

如何复制CGBitmapcontext?
EN

Stack Overflow用户
提问于 2015-01-03 21:26:54
回答 1查看 342关注 0票数 1

我试图保存位图上下文,并将其分配给另一个位图上下文,以便以后能够绘制它。但我不能百分之百确定该怎么做。是否可以像下面的例子那样分配它?

代码语言:javascript
复制
//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;
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-03 21:53:59

在您的代码中,您不是在复制上下文,而是简单地创建对它的新引用,因此在拷贝位图之后,两个变量将指向同一个对象,而对其中一个的任何更改都会影响另一个.

不幸的是,没有直接的方法将一个CGBitmapContext复制到另一个CGBitmapContext中,因此您需要手动创建第二个参数与第一个参数相同的备份数据,以及一个带有memcpy的备份数据副本(如果您有对它的引用,则直接从cacheBitmap创建,或者从CGBitmapContext获得它)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27759719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档