我有一个UIWebView,其中包含由Google Charts(javascript呈现)生成的图形
屏幕不是pdf或png。
是否可以捕获屏幕上的内容并将其发送到AirPrint?
答案 0 :(得分:5)
截取网页浏览的屏幕截图并将其发送至AirPrint。
// TAKE SCREENSHOT
CGRect myRect = [self.view bounds];
UIGraphicsBeginImageContext(myRect.size);
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
CGContextFillRect(ctx, myRect);
[self.view.layer renderInContext:ctx];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
NSData *imageData = UIImageJPEGRepresentation(viewImage, 1.0);
UIGraphicsEndImageContext();
答案 1 :(得分:3)
以下是转换为Monotouch .NET c#
的答案 public static UIImage TakeScreenShot (UIView view)
{
try
{
RectangleF canvasRect = view.Bounds;
UIGraphics.BeginImageContext (canvasRect.Size);
CGContext ctx = UIGraphics.GetCurrentContext ();
ctx.FillRect (canvasRect);
view.Layer.RenderInContext (ctx);
UIImage newImage = UIGraphics.GetImageFromCurrentImageContext ();
UIGraphics.EndImageContext ();
return newImage;
}
catch
{
return null;
}
}
答案 2 :(得分:0)
应该在UIWebView.LoadFinished之后调用'UIGetWebViewPrintScreen'函数
void main()
{
RectangleF rect(0, 0, 100, 100);
UIWebView = new UIWebView();
UIImage Img = null;
string sHtml = "test string";
WebView.LoadHtmlString(sHtml, null);
WebView.Frame = rect;
WebView.LoadFinished += delegate
{
if (UIGetWebViewPrintScreen (WebVIew, Img))
{
//doing with Img what you want.
}
}
}
public bool UIGetWebViewPrintScreen(UIWebView WebView, out UIImage Img)
{
bool bSuccess = false;
//Should be call after event uiWebView.LoadFinished
UIGraphics.BeginImageContext(WebView.ScrollView.Bounds.Size);
CGContext cnt = UIGraphics.GetCurrentContext();
if (cnt != null)
{
WebView.Layer.RenderInContext(cnt);
Img = UIGraphics.GetImageFromCurrentImageContext();
bSuccess = true;
}
else
Img = null;
UIGraphics.EndImageContext();
return bSuccess;
}