আইওএসে প্রোগ্রামিয়ালি স্ক্রিনশট কীভাবে নেওয়া যায়


157

আমি স্ক্রিনে থাকা চিত্রটির একটি স্ক্রিনশট সংরক্ষিত ফটো লাইব্রেরিতে সংরক্ষণ করতে চাই।

উত্তর:


233

রেটিনা প্রদর্শনের জন্য একটি চেক বিবেচনা করে নিম্নলিখিত কোড স্নিপেট ব্যবহার করুন:

#import <QuartzCore/QuartzCore.h> 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
} else {
    UIGraphicsBeginImageContext(self.window.bounds.size);
}

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
if (imageData) {
    [imageData writeToFile:@"screenshot.png" atomically:YES];
} else {
    NSLog(@"error while taking screenshot");
}

13
নোট করুন যে এটি ওপেনজিএল ইএস স্তরগুলির মতো নির্দিষ্ট ধরণের স্ক্রিন সামগ্রী ক্যাপচার করবে না। হুয়া-ইং ইঙ্গিত করে ইউআইজিটস্ক্রিনআইমেজ ()।
ব্র্যাড লারসন

12
প্রিয় ব্যক্তিগণ, # আইফোর্ট <কোয়ার্টজকোর / কোয়ার্টজকোর.ই করতে ভুলবেন না
এনরিকো সুসাত্তি

আপনি যদি আপনার অ্যাপ্লিকেশন তোলা কোনও ছবি দেখছেন তবে এটি কি স্ক্রিনশট নেবে?
জন রিসেলভাতো

5
এই চিত্রটি কোথায় সঞ্চিত?
বুরহানউদ্দিন সুনেলওয়ালা

3
@ ওলাদিমির-প্যালান্ট: কী-বোর্ড সম্পর্কে কী বলা যায়, কারণ যখন আমি যখন স্ক্রিনশট ব্যবহার করি যেখানে ব্যবহারকারী টাইপ করেন, তখন কী বোর্ড ক্যাপচার না করে, কীভাবে আমি কী-বোর্ডকে স্ক্রিন ক্যাপচারে যুক্ত করতে পারি ..?
g212gs

46

নীচে পদ্ধতিটি ওপেনজিএল অবজেক্টের জন্যও কাজ করে

//iOS7 or above
- (UIImage *) screenshot {

    CGSize size = CGSizeMake(your_width, your_height);

    UIGraphicsBeginImageContextWithOptions(size, NO, [UIScreen mainScreen].scale);

    CGRect rec = CGRectMake(0, 0, your_width, your_height);
    [_viewController.view drawViewHierarchyInRect:rec afterScreenUpdates:YES];

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

5
UIGetScreenImageএকটি ব্যক্তিগত এপিআই
জোনাহাব

এটার জন্য অনেক ধন্যবাদ! আপনি অবশ্যই আমার ভোট পাবেন। অন্য একাধিক উপায়ে চেষ্টা করার পরেও দেখা যাচ্ছে যে জাভাফ্যাক্স ইউআই সহ রোবভমে কীভাবে পর্দা দখল করা যায় সেই একমাত্র ড্রইউ ভিউইয়ারকিই।
ক্রিস্টো স্মল

এটাই প্রতিটা সময় কাজ করছে !!!! আমার স্ক্রিনশটটিতে 3 ডি রূপান্তর হয়েছে এবং অন্যান্য সমাধানগুলি আমার স্ক্রিনশটটিতে গোলমাল করেছে। এটি করা উচিত যেমন এটি কাজ করে। অনেক ধন্যবাদ!
অ্যান্ড্রুউ

1
যদি ভিউ কন্ট্রোলার কোনও নেভিগেশন কন্ট্রোলারে থাকে তবে নেভিগেশন বারটি ধরা
পড়েনি

হ্যাঁ, ড্রইউ ভিউ হাইআরচিআইএনআরেক্ট রেন্ডারআইএনটেক্সট :-) এর চেয়ে দ্রুত
একা

20
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

NSData *imageData = UIImageJPEGRepresentation(image, 1.0 ); //you can use PNG too
[imageData writeToFile:@"image1.jpeg" atomically:YES];

1
+1 পিএনজি ব্যবহার সম্পর্কে নোটের জন্য। এটি ক্ষতিহীন এবং মানের = 1.0 সহ জেপিগের চেয়ে ছোট হবে।
রব

1
এটি ফাঁকা জায়গা ছেড়ে আইওএস 7 এ নেভিগেশনবার গ্রহণ করছে না।
আলী সুফিয়ান 11

14
- (UIImage*) getGLScreenshot {
    NSInteger myDataLength = 320 * 480 * 4;

    // allocate array and read pixels into it.
    GLubyte *buffer = (GLubyte *) malloc(myDataLength);
    glReadPixels(0, 0, 320, 480, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

    // gl renders "upside down" so swap top to bottom into new array.
    // there's gotta be a better way, but this works.
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength);
    for(int y = 0; y <480; y++)
    {
        for(int x = 0; x <320 * 4; x++)
        {
            buffer2[(479 - y) * 320 * 4 + x] = buffer[y * 4 * 320 + x];
        }
    }

    // make data provider with data.
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, NULL);

    // prep the ingredients
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * 320;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

    // make the cgimage
    CGImageRef imageRef = CGImageCreate(320, 480, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);

    // then make the uiimage from that
    UIImage *myImage = [UIImage imageWithCGImage:imageRef];
    return myImage;
}

- (void)saveGLScreenshotToPhotosAlbum {
    UIImageWriteToSavedPhotosAlbum([self getGLScreenshot], nil, nil, nil);  
}

উত্স


1
মাইডাটালেংথ 320 * 480 এর 4 টি শীর্ষে কেন গুণিত হয়?
জাব

2
এটি সত্যই খুব মূর্খ বলে মনে হয় যে তারা আমাদের এটি করার সহজ উপায় সরবরাহ করে না।
জব

320 * 480 পিক্সেলের সংখ্যা। চার বার টাইমস যাতে আপনার প্রতিটি পিক্সেলের জন্য আরজিবিএ থাকে।
আইস্টিনা

আইফোন 4 :-) চলমান যখন স্কেল ফ্যাক্টর দ্বারা একাধিক মনে রাখবেন
মিস্টার ডেটাবেস

1
অ্যাস্টিনা, ব্যবহার করুন UIImage *myImage = [[UIImage alloc] initWithCGImage:imageRef scale:1.0 orientation:UIImageOrientationDownMirrored];এবং আপনার আর 'বাফার 2' লাগবে না। বিটিডাব্লু মনে হচ্ছে আপনি মেমরি পরিচালনা সম্পর্কে ভুলে গেছেন, কোনও ফ্রি () বা রিলিজ () কল নেই ...
ওলেগ ট্রাখম্যান

10

সুইফ ইন

func captureScreen() -> UIImage
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0);

    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return image
}

9

দেখুন এই পোস্টে আপনার মত এখন জন্য UIGetScreenImage () ব্যবহার করতে পারেন এটা দেখায়।


9
আইওএস 4-এ আবার অনুমোদিত নয়
su

9

আইওএস 10 হিসাবে এটি কিছুটা সহজতর হয়। ইউআইকিট আসে UIGraphicsImageRenderযা আপনাকে অনুমতি দেয়

... রঙিন গভীরতা এবং চিত্র স্কেল, বা কোর গ্রাফিক্স প্রসঙ্গগুলি পরিচালনা করার মতো কনফিগারেশন পরিচালনা না করেই অঙ্কন কাজগুলি সম্পন্ন করুন

অ্যাপল ডক্স - ইউআইজিগ্রাফিকস আইমেজ রেন্ডারার

সুতরাং আপনি এখন এর মতো কিছু করতে পারেন:

let renderer = UIGraphicsImageRenderer(size: someView.bounds.size)

let image = renderer.image(actions: { context in
    someView.drawHierarchy(in: someView.bounds, afterScreenUpdates: true)
})

এখানে বেশিরভাগ উত্তর বেশিরভাগ ক্ষেত্রেই আমার পক্ষে কাজ করেছিল। তবে কোনওটির স্ন্যাপশট নেওয়ার চেষ্টা করার সময় ARSCNView, আমি উপরে বর্ণিত পদ্ধতিটি ব্যবহার করে এটি করতে সক্ষম হয়েছি। যদিও এটি লক্ষণীয় যে এই মুহুর্তে, এআরকিট এখনও বিটাতে রয়েছে এবং এক্সকোড বিটা 4 এ রয়েছে


7

এটি একটি স্ক্রিনশট সংরক্ষণ করবে এবং পাশাপাশি স্ক্রিনশটটিও ফিরিয়ে দেবে।

-(UIImage *)capture{
    UIGraphicsBeginImageContext(self.view.bounds.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *imageView = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    UIImageWriteToSavedPhotosAlbum(imageView, nil, nil, nil); //if you need to save
    return imageView;
}

5

আমি মনে করি নীচের স্নিপেটটি যদি আপনি একটি পূর্ণ স্ক্রিন নিতে চান ( স্ট্যাটাস বার ব্যতীত ), প্রয়োজনে কেবল অ্যাপডেলিগেটের সাথে আপনার অ্যাপের প্রতিনিধি নামটি প্রতিস্থাপন করুন।

- (UIImage *)captureFullScreen {

    AppDelegate *_appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        // for retina-display
        UIGraphicsBeginImageContextWithOptions(_appDelegate.window.bounds.size, NO, [UIScreen mainScreen].scale);
        [_appDelegate.window drawViewHierarchyInRect:_appDelegate.window.bounds afterScreenUpdates:NO];
    } else {
        // non-retina-display
        UIGraphicsBeginImageContext(_bodyView.bounds.size);
        [_appDelegate.window drawViewHierarchyInRect:_appDelegate.window.bounds afterScreenUpdates:NO];
    }

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

সাধারণত নেভিগেশন বার যুক্ত করে এমন এক! পারলে দুবার ভোট দিতাম!
চিয়ারস

4

সুইফট 3 বাস্তবায়নের সাথে আমি কোনও উত্তর খুঁজে পাইনি। সুতরাং এখানে এটি যায়।

static func screenshotOf(window: UIWindow) -> UIImage? {

    UIGraphicsBeginImageContextWithOptions(window.bounds.size, true, UIScreen.main.scale)

    guard let currentContext = UIGraphicsGetCurrentContext() else {
        return nil
    }

    window.layer.render(in: currentContext)
    guard let image = UIGraphicsGetImageFromCurrentImageContext() else {
        UIGraphicsEndImageContext()
        return nil
    }

    UIGraphicsEndImageContext()
    return image
}

3

আইওএস 7.0 বা ততোধিকের জন্য ..

আপনি যদি বলার স্ক্রিনশট নিতে চান (মাইভিউ), আপনি একক লাইন দিয়ে এটি করতে পারেন:

[myView snapshotViewAfterScreenUpdates:NO];

3

এটি দ্রুত 4.2 এর সাথে কাজ করবে , স্ক্রিনশটটি লাইব্রেরিতে সংরক্ষণ করা হবে, তবে দয়া করে এডিট করতে ভুলবেন না info.plist @ NSPhotoLibraryAddUsageDescription:

  @IBAction func takeScreenshot(_ sender: UIButton) {

    //Start full Screenshot
    print("full Screenshot")
    UIGraphicsBeginImageContext(card.frame.size)
    view.layer.render(in: UIGraphicsGetCurrentContext()!)
    var sourceImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(sourceImage!, nil, nil, nil)

    //Start partial Screenshot
    print("partial Screenshot")
    UIGraphicsBeginImageContext(card.frame.size)
    sourceImage?.draw(at: CGPoint(x:-25,y:-100)) //the screenshot starts at -25, -100
    var croppedImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(croppedImage!, nil, nil, nil)

}

2

ভিউ থেকে স্ক্রিনশট পান

-(UIImage *)getScreenshotImage {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, FALSE, 2.0);
    } else {
        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, FALSE, 1.0);
    }

    [self.view.window.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * result = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return result;
}

ফটোতে ছবি সংরক্ষণ করুন

UIImageWriteToSavedPhotosAlbum(YOUR_IMAGE, nil, nil, nil);

কিভাবে

UIImageWriteToSavedPhotosAlbum([self getScreenshotImage], nil, nil, nil);

2

দৃশ্য থেকে স্ক্রিনশট পান:

- (UIImage *)takeSnapshotView {
    CGRect rect = [myView bounds];//Here you can change your view with myView
    UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [myView.layer renderInContext:context];
    UIImage *capturedScreen = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return capturedScreen;//capturedScreen is the image of your view
}

আশা করি, আপনি এটিই খুঁজছেন কোন উদ্বেগ আমার কাছে ফিরে। :)


2

আমি এই প্রশ্নের উত্তর দিচ্ছি কারণ এটি একটি সর্বাধিক দেখা হয়েছে, এবং সেখানে অনেক উত্তর রয়েছে এবং এখানে সুইফট এবং ওবজ-সি রয়েছে।

দাবি অস্বীকার এটি আমার কোড বা আমার উত্তর নয়, এটি কেবল এখানে ভূমির লোকদের দ্রুত উত্তর খুঁজে পেতে সহায়তা করার জন্য। ক্রেডিট দেওয়ার জন্য মূল উত্তরের লিঙ্কগুলি রয়েছে যেখানে creditণ দেওয়ার কথা !! আপনি যদি তাদের উত্তরটি ব্যবহার করেন তবে দয়া করে মূল উত্তরগুলিকে একটি +1 দিয়ে সম্মান করুন!


ব্যবহার QuartzCore

#import <QuartzCore/QuartzCore.h> 

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    UIGraphicsBeginImageContextWithOptions(self.window.bounds.size, NO, [UIScreen mainScreen].scale);
} else {
    UIGraphicsBeginImageContext(self.window.bounds.size);
}

[self.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImagePNGRepresentation(image);
if (imageData) {
    [imageData writeToFile:@"screenshot.png" atomically:YES];
} else {
    NSLog(@"error while taking screenshot");
}

সুইফটে

func captureScreen() -> UIImage
{

    UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0);

    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

    let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return image
}

দ্রষ্টব্য: প্রোগ্রামিং সহ প্রকৃতি হিসাবে আপডেটগুলি করা দরকার হতে পারে তাই সম্পাদনা করুন বা আমাকে জানান! * এছাড়াও আমি যদি উত্তর / পদ্ধতির মূল্য অন্তর্ভুক্ত করতে ব্যর্থ হই তবে আমাকেও অবহিত করুন!


1
এই উত্তরটিতে কিছু যুক্ত হবে বলে মনে হচ্ছে না। আপনি ইতিমধ্যে দুটি পৃষ্ঠার উত্তর দুটি অনুলিপি করেছেন এবং ফলাফলটিকে নিজের হিসাবে পোস্ট করেছেন।
ব্যবহারকারী 2357112 মনিকা

আমার উদ্দেশ্য ছিল তাদের উত্তরগুলির জন্য creditণ নেওয়া নয়, এটি ছিল একটি দ্রুত উত্তর এবং ওবজ-সি উভয়ই অন্তর্ভুক্ত করা যাতে লোকেরা এটি খুঁজে পেতে তত দ্রুত হয়। আমি সংশ্লিষ্ট উত্তরগুলিও উল্লেখ করেছি। যদি এটি না করা হয় তবে আমি আমার উত্তরটি মুছব এবং তাদের মধ্যে কেবল একটিতে ফিরে যাব।
জাব

আমি ObjC সমাধানটি ব্যবহার করছি। আমার জন্য, আমাকে "স্ব" পরে ".ভিউ" যুক্ত করতে হয়েছিল, তবে ফলাফলটি 100%। এটি গোল্ড
সমুদ্রের

এটি উপস্থাপনা স্ট্রিম ক্যাপচারের জন্যও কাজ করেছিল। ধন্যবাদ
ওয়াইএসআর ভক্ত

1

আরেকটি বিকল্প হ'ল যন্ত্রগুলিতে অটোমেশন সরঞ্জামটি ব্যবহার করা। আপনি যা চান রাজ্যে স্ক্রিন রাখার জন্য আপনি একটি স্ক্রিপ্ট লেখেন, তারপরে শটগুলি নিন। আমি আমার অ্যাপগুলির একটির জন্য ব্যবহৃত স্ক্রিপ্টটি এখানে দিচ্ছি। স্পষ্টতই, স্ক্রিপ্টের বিবরণগুলি আপনার অ্যাপ্লিকেশনের জন্য আলাদা হবে।

var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var picker = window.pickers()[0];
var wheel = picker.wheels()[2];
var buttons = window.buttons();
var button1 = buttons.firstWithPredicate("name == 'dateButton1'");
var button2 = buttons.firstWithPredicate("name == 'dateButton2'");

function setYear(picker, year) {
    var yearName = year.toString();
    var yearWheel = picker.wheels()[2];
    yearWheel.selectValue(yearName);
}

function setMonth(picker, monthName) {
    var wheel = picker.wheels()[0];
    wheel.selectValue(monthName);
}

function setDay(picker, day) {
    var wheel = picker.wheels()[1];
    var name = day.toString();
    wheel.selectValue(name);
}

target.delay(1);
setYear(picker, 2015);
setMonth(picker, "July");
setDay(picker, 4);
button1.tap();
setYear(picker, 2015);
setMonth(picker, "December");
setDay(picker, 25);

target.captureScreenWithName("daysShot1");

var nButtons = buttons.length;
UIALogger.logMessage(nButtons + " buttons");
for (var i=0; i<nButtons; i++) {
    UIALogger.logMessage("button " + buttons[i].name());
}

var tabBar = window.tabBars()[0];
var barButtons = tabBar.buttons();

var nBarButtons = barButtons.length;
UIALogger.logMessage(nBarButtons + " buttons on tab bar");

for (var i=0; i<nBarButtons; i++) {
    UIALogger.logMessage("button " + barButtons[i].name());
}

var weeksButton = barButtons[1];
var monthsButton = barButtons[2];
var yearsButton = barButtons[3];

target.delay(2);
weeksButton.tap();
target.captureScreenWithName("daysShot2");
target.delay(2);
monthsButton.tap();
target.captureScreenWithName("daysShot3");
target.delay(2);
yearsButton.tap();
target.delay(2);
button2.tap();
target.delay(2);
setYear(picker, 2018);
target.delay(2);
target.captureScreenWithName("daysShot4");

1

বেলো সাইটে দুটি বিকল্প উপলব্ধ:

বিকল্প 1: ইউআই উইন্ডো ব্যবহার করে (চেষ্টা করুন এবং নিখুঁতভাবে কাজ করুন)

// create graphics context with screen size
CGRect screenRect = [[UIScreen mainScreen] bounds];
UIGraphicsBeginImageContext(screenRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, screenRect);

// grab reference to our window
UIWindow *window = [UIApplication sharedApplication].keyWindow;

// transfer content into our context
[window.layer renderInContext:ctx];
UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

বিকল্প 2: ইউআইভিউ ব্যবহার করে

// grab reference to the view you'd like to capture
UIView *wholeScreen = self.splitViewController.view;

// define the size and grab a UIImage from it
UIGraphicsBeginImageContextWithOptions(wholeScreen.bounds.size, wholeScreen.opaque, 0.0);
[wholeScreen.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

রেটিনা পর্দার জন্য (ডেনউকেম উত্তর হিসাবে)

// grab reference to our window
    UIWindow *window = [UIApplication sharedApplication].keyWindow;

    // create graphics context with screen size
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(screenRect.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(screenRect.size);
        [window.layer renderInContext:UIGraphicsGetCurrentContext()];
    }

আরও বিশদ জন্য: http://pinkstone.co.uk/how-to-take-a-screeshot-in-ios-programmatically/


1

কেবলমাত্র একটি ছোট অবদান, আমি এটি একটি বোতাম দিয়ে করেছি তবে টিপে টিপানোর অর্থ হ'ল বোতামটি চেপে ধরেছে। তাই প্রথমে আমি আলোকপাত করি।

- (IBAction)screenShot:(id)sender {
    // Unpress screen shot button
    screenShotButton.highlighted = NO;

    // create graphics context with screen size
    CGRect screenRect = [[UIScreen mainScreen] bounds];

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, [UIScreen mainScreen].scale);
    } else {
        UIGraphicsBeginImageContext(self.view.bounds.size);
    }

    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor blackColor] set];
    CGContextFillRect(ctx, screenRect);

    // grab reference to our window
    UIWindow *window = [UIApplication sharedApplication].keyWindow;

    // transfer content into our context
    [window.layer renderInContext:ctx];
    UIImage *screengrab = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    // save screengrab to Camera Roll
    UIImageWriteToSavedPhotosAlbum(screengrab, nil, nil, nil);
}

আমি কোডটির মূল অংশটি পেয়েছি: http://pinkstone.co.uk/how-to-take-a-screeshot-in-ios-programmatically/ যেখানে আমি বিকল্প 1 ব্যবহার করেছি, বিকল্প 2 কাজ করছে বলে মনে হচ্ছে না আমার জন্য. এই থ্রেড থেকে রেন্টিনা স্ক্রিন আকারের জন্য সামঞ্জস্যগুলি এবং স্ক্রিনশটবটনের আনহাইটলাইটিং যুক্ত করেছে। আমি যে ভিউটিটিতে এটি ব্যবহার করছি তা হ'ল স্টোরিবোর্ডেড বোতাম এবং লেবেলের স্ক্রিন এবং বেশ কয়েকটি ইউআইভিউ সহ পরে প্রোগ্রামটির মাধ্যমে যুক্ত করা হয়েছে।


সম্পাদনার জন্য ধন্যবাদ__উব আমি বুঝতে পেরেছি আমি মন্তব্য কোডে রেখে এসেছি, তবে তারপরে "এটাই সত্য যে পেস্ট করা কোডটি"। লাইভ ওয়ার্কিং কোড যা এখন অ্যাপ স্টোরে রয়েছে।
সায়মানস্কি

1

সুইফটে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন।

if UIScreen.mainScreen().respondsToSelector(Selector("scale")) {
    UIGraphicsBeginImageContextWithOptions(self.window!.bounds.size, false, UIScreen.mainScreen().scale)
}
else{
    UIGraphicsBeginImageContext(self.window!.bounds.size)
}
self.window?.layer.renderInContext(UIGraphicsGetCurrentContext())
var image : UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)

0

সুইফট 4:

func makeImage(withView view: UIView) -> UIImage? {

    let rect = view.bounds

    UIGraphicsBeginImageContextWithOptions(rect.size, true, 0)

    guard let context = UIGraphicsGetCurrentContext() else {
      assertionFailure()
      return nil
    }

    view.layer.render(in: context)

    guard let image = UIGraphicsGetImageFromCurrentImageContext() else {
      assertionFailure()
      return nil
    }

    UIGraphicsEndImageContext()

    return image
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.