【问题标题】:Screen capture in iPad programmatically以编程方式在 iPad 中截屏
【发布时间】:2013-02-04 14:14:49
【问题描述】:

在我的 iPad 应用程序中,我想实现一个功能,例如当用户单击应用程序中的按钮时,当前屏幕的屏幕截图应存储在数据库中。我是 ios 开发的新手,我完全不知道如何实现它。请指导我如何。

【问题讨论】:

    标签: iphone ios objective-c ipad ios5


    【解决方案1】:

    请参阅this link。在这里您将找到有关如何截取屏幕截图的代码。

    不要将图像保存在数据库中,将图像保存在 iPad 的文档目录中。只需将该图像的文件名保存在数据库中,这将有助于您轻松获取图像。

    希望这些信息对您有所帮助..

    【讨论】:

      【解决方案2】:

      试试这个...

      - (UIImage*)captureView:(UIView *)view 
      {
          CGRect rect = [[UIScreen mainScreen] bounds];
          UIGraphicsBeginImageContext(rect.size);
          CGContextRef context = UIGraphicsGetCurrentContext();
          [view.layer renderInContext:context];
          UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
          UIGraphicsEndImageContext();
          return img;
      }
      
      - (void)saveScreenshotToPhotosAlbum:(UIView *)view 
      {
          appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];  
          UIImageWriteToSavedPhotosAlbum([self captureView:self.view], nil, nil,nil);
      }
      

      只需将您想要捕获的任何 Uiview 发送到 - (UIImage*)captureView:(UIView *)view 方法

      【讨论】:

        【解决方案3】:

        其他答案中的链接确实提供了很好的解决方案。正如 P.J 所建议的,最好将图像保存在文档目录中,并且只将文件名保存在数据库中。

        但是,如果您迫切希望将图像保存在数据库中,这里是我使用的示例

        NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO TABLE_NAME (NAME, IMAGE) VALUES (\"%@\", (?))", name];
        
        
         if(sqlite3_prepare_v2(databaseObj,[insertSQL cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK)
                        {
                            NSData* imageData = UIImagePNGRepresentation(image);
                            sqlite3_bind_blob(statement, 2, [imageData bytes], [imageData length], SQLITE_STATIC);
        
                        if(sqlite3_step(statement) != SQLITE_DONE )
                            NSLog( @"Error: %s", sqlite3_errmsg(databaseObj) );
                        else
                            NSLog( @"Insert into row id = %lld", (sqlite3_last_insert_rowid(playerDB)));
                        sqlite3_finalize(statement);
                    }
        

        【讨论】:

        • 嗨,这个问题被 5 人否决了。请告诉我哪里出了问题,以便我改正。
        • @user1531912 :可能是因为您没有进行任何研究并发布了答案。否则,网站上的答案几乎就在那里,并进行了一些修改。虽然不确定...
        猜你喜欢
        • 1970-01-01
        • 2011-12-07
        • 1970-01-01
        • 2014-06-02
        • 2012-07-05
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2016-03-18
        相关资源
        最近更新 更多