簡體   English   中英

屏幕截圖代碼可以在Simulator中完美運行,但不能在iOS Device中運行

[英]Screenshot code working perfectly in Simulator but not in iOS Device

這是我的屏幕快照代碼,可保存在庫中或發送電子郵件。 問題是,它在Simulator中運行良好,但是當我在Device中運行此代碼時,無論在屏幕上什么,它只會顯示白色圖像。 我已經嘗試過同時使用iOS 5和iOS 6,但沒有運氣我應該錯了的原因是什么

    NSInteger myDataLength = 320 * 430 * 4;
    GLubyte *buffer1 = (GLubyte *) malloc(myDataLength);
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);    

    //Read image memory form OpenGL
    glReadPixels(0, 50, 320, 430, GL_RGBA, GL_UNSIGNED_BYTE, buffer1);

    //Invert result image buffer into secondary buffer
    for(int y = 0; y < 430; y++)    {
        for(int x = 0; x < 320 * 4; x++) {
            buffer2[(429 - y) * 320 * 4 + x] = buffer1[y * 4 * 320 + x];
        }
    }

    //Create bitmap context
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef destContext = CGBitmapContextCreate(buffer2, 320, 430, 8, 320 * 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

    //Get image from context
    CGImageRef resultContext = CGBitmapContextCreateImage(destContext);
    UIImage *resultImg = [UIImage imageWithCGImage: resultContext];
    CGImageRelease(resultContext);

    //Send to mail or Save to PhotoLibrary
    if (sendMail) {
        [self emailImage: resultImg];
    } else {
        UIImageWriteToSavedPhotosAlbum(resultImg, nil, nil, nil);
    }

    //Release allocated memory
//  [resultImg release];
    free(buffer2);
    free(buffer1);
    CGContextRelease(destContext);
    CGColorSpaceRelease(colorSpace);

有沒有我正在使用的任何類,模擬器都支持該類,而不是該設備?如果是,那么哪個類,因為據我搜索,我什么都沒找到。

我發現我上面的代碼很完美,問題不在這里。實際上問題出在

eaglLayer.drawableProperties

我已經從此代碼更改

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:

            [NSNumber numberWithBool:NO],  
                kEAGLDrawablePropertyRetainedBacking, 
                kEAGLColorFormatRGB565, 
                kEAGLDrawablePropertyColorFormat, nil];

對此

eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:

                [NSNumber numberWithBool:YES],  
                    kEAGLDrawablePropertyRetainedBacking, 
                    kEAGLColorFormatRGB565, 
                    kEAGLDrawablePropertyColorFormat, nil];

我剛設定

        kEAGLDrawablePropertyRetainedBacking = YES

謝謝上帝,一切正常。 但不知道為什么有人知道請告訴我

試試這個,它在設備上對我來說很完美:

+ (UIImage *)imageFromView:(UIView *)view inRect:(CGRect)rect {
    CGFloat screenScale = [[UIScreen mainScreen] scale];
    if ([view respondsToSelector:@selector(contentSize)]) {
        UIScrollView *scrollView = (UIScrollView *)view;
        UIGraphicsBeginImageContextWithOptions(scrollView.contentSize, NO, screenScale);
    } else {
        UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, screenScale);
    }
    CGContextRef resizedContext = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:resizedContext];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    image = [UIImage imageWithCGImage:CGImageCreateWithImageInRect(image.CGImage, CGRectMake(rect.origin.x*screenScale, rect.origin.y*screenScale, rect.size.width*screenScale, rect.size.height*screenScale))];
    UIGraphicsEndImageContext();
    return [image imageScaledToSize:CGSizeMake(rect.size.width, rect.size.height)];
}

- (UIImage *)imageScaledToSize:(CGSize)newSize {
    if ((self.size.width == newSize.width) && (self.size.height == newSize.height)) {
        return self;
    }
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
    UIGraphicsEndImageContext();
    return newImage;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM