iphone screenshot specific area - iphone

I have a View including a Toolbar and a WebView
UIVIEW
UIToolbar
UIWebview
Now i like to make a screenshot ONLY from the WebView with:
UIGraphicsBeginImageContext(articleWebView.window.bounds.size);
[articleWebView.window.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
But always ImageCapture starts from the TOP of the Screen.
So it includes the Toolbar (even 20 empty pixel at the top from the Statusbar)
How can I just capture the Image thats actual in my UIWebView?
Thanks Chris

Your UIWebView is backed by its own layer, so you should be able to just grab the currently displayed contents for it:
UIGraphicsBeginImageContext(articleWebView.bounds.size);
[articleWebView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Related

why the image become zoom while converting view to image?

I have uiview and i want to convert that view to image which is working quite well but when i pressed the home button of iphone and run the app again the image become zoom in .Here is my code to converting view to image.
- (UIImage *)captureView {
CGRect rect = [myview bounds];
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
[myview.layer renderInContext:context];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
checkImage.image = [self captureView];
here this code is not wrong but you used some other object instead of whole view . i don't know but try to use that view bounds in which that whole Image display.. See my answer same like your this answer from this bellow link..
how to capture uiview top uiview
Also try with self.view instead of myView in your code.
add this code instead of your checkImage.image = [self captureView]; line..
UIImageView *imgTempHeader = [[UIImageView alloc]initWithImage:[self captureView]];
imgTempHeader.frame = self.view.frame;
[self.view addSubview:imgTempHeader];
[self.view bringSubviewToFront:imgTempHeader];
You should be creating the context in a way which uses the scale of the device:
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
Then when you display the image in the image view ensure that the content mode is set to prevent scaling.
My experience is with setting up imageViews in IB. I assume checkImage is an instance of UIImageView?
If you were displaying an image in a UIImageView and had only set the view mode to center in interface builder it would appear zoomed in if the image was large.
Have a look at this way to process your image first:
UIImage *newImage = [[UIImage alloc] initWithCGImage:myCGImageRef scale:myZoomSCale orientation:UIImageOrientationDown];
Of course you will need to give it a CGImageRef for your image. Over to you or somebody else for that.

i want to convert UIImageView to UIImage or in PDF also, is it possible??

i have taken an UIImageView on top of it taken some labels now i want to convert this UIImageView to UIImage or in PDF also, is it possible??
By your question , it seems you want to take a screenshot of your view and save it as an image or pdf.
You can take Screenshot of view and save it in photo Gallery using following code.
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenShotimage = UIGraphicsGetImageFromCurrentImageContext();
UIImageWriteToSavedPhotosAlbum(screenShotimage, nil, nil, nil);
UIGraphicsEndImageContext();

changing the bounds property of UIView in iOS, then rendering image

In my app:
I have a view (UIView *myView) wihth clipsToBound = YES;
I have a button to do changing the origin of bounds property:
CGRect newRect = myView.bounds;
newRect.origin.x += 100;
myView.bounds = newRect;
myView.layer.frame = newRect;
Then I get the image from the view:
UIGraphicsBeginImageContext(myView.bounds.size);
[myView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage_after = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage_after, nil, nil, nil);
It produces the image I don't expected. I want a image as I see in the iPhone's screen.
Link for the code here:
http://www.mediafire.com/?ufr1q8lbd434wu1
Please help me!
You don't want to render the image itself in your context - that will always render in the same way (you're not altering the image, you're jsut moving how far up the view it is).
You want to render the image's parent view like this :
UIGraphicsBeginImageContext(myView.superview.bounds.size);
[myView.superview.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage_after = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImage_after, nil, nil, nil);
EDIT
However, you might not want to render everything in your superview :)
Your views might look something like
MainView
ImageView (myView)
UIButton (ok button)
UIButton (cancel button)
Here, rendering your image's superview will render MainView - including the buttons!
You need to add another view into your hierachy like this :
MainView
UIView (enpty uiview)
ImageView (myView)
UIButton (ok button)
UIButton (cancel button)
Now, when you render your image's superview, it's only got the image inside it - the buttons don't get rendered :)

How to convert UIView to UIImage without background?

I have UIView that contain a pin image and a label, as we know UIView is rectangle so if I convert UIView to UIImage,UIImage is also rectangle, I want make UIImage like the a pin image because if user click a background, UIImage's event will be called too.. I want to convert UIView to UIImage without it's background, how can it be?
I use this method to change UIView to UIImage
-(UIImage *) ChangeViewToImage : (UIView *) view{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
Hmm.. example like this, I have a rectangle as a UIView and a triangle as a shape in UIView. and then I want to make this UIView become a UIImage, but I just want the triangle without background, so the image just a triangle.. how can I do It?
A UIImage is always rectangular. What you can play with is the opacity in your views. If you make everything except your pin image transparent, it will seem as if you just have an image of the pin.
Use:
view.backgroundColor = [UIColor clearColor];
to make your view's background transparent.

Capturing image storing in UIimage view showing landscape direction

I wrote the code for camara application. The view having one button and one UIimageview. When I click on camera, camera will open after capturing image and when I click on use button it is showing some part only in the UIimageview that too in landscape direction.
CGSize size=CGSizeMake(editView.bounds.size.width,editView.bounds.size.height);
UIGraphicsBeginImageContext(size);
[editView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImageCaptureSend = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
UIImageWriteToSavedPhotosAlbum(viewImageCapture, nil, nil, nil);