I have a Flutter canvas , and I'd like to save that canvas as a bitmap image (e.g. PNG, but any common bitmap format will do). What's the best way to get the bits out of a canvas, converted to a bitmap image format?
Create a PictureRecorder.
Create a Canvas with your PictureRecorder and draw stuff.
Call endRecording() on the PictureRecorder to get a Picture.
Call toImage() on the Picture.
Call toByteData() on the Image.
Related
Imagine this, where I can render a picture as a canvas & then interact with whatever pixel I want.
Firstly I'd need to parse the pixels somehow, I've tried parsing this picture by it's on-picture pixel amount by using filesize/12x12 & trying to only render sub-lists of the bytes with Image.memory, but it didn't really work out well since it still doesn't make the pixels interactable & it renders it top-down. Maybe I would need to use an image that's true to size pixel amount instead but I'd then need to upscale it somehow.
Do I map each pixel to an container widget? Do I use the flutter canvas library? Im pretty confused.
How would I go about doing this?
Our app,you want code like that??
: https://apps.apple.com/vn/app/pixel-art-editor-for-mcpe/id1603567060
EDIT:
First: you need this: https://pub.dev/packages/image
img.Image image = img.decodeImage(file.readAsBytesSync());
image.setPixelSafe(x,y,color);// this line draw a color to pixel at x,y
next step paint image to canvas or Image.memory()
I want to add image on canvas(color:White) using Render object in flutter.
Initially I want the canvas to be white in color and Rectangular in shape.
After I load an image, That image should be in top canvas.
I dont know how to do it.Please help me to do this.
So I'd like to create a class that accepts a CGImage from an image file I just read from disk, does work on that image texture (color transformations) then returns the texture as a CGImage and does all this in the background w/out drawing to screen. I've looked at Apple's demo app on GLImageProcessing but it draws all the processing to the screen and I've seen bits and bites of how to do parts of what I want but can't assemble it.
Any suggestions would be greatly appreciated.
Thanks
You will have to use Framebuffer Objects (FBOs) to draw offscreen, but you still need a GL rendering context.
I have several rectangular images (in landscape and portrait mode) and want to draw them onto a transparent square image, so that all images became the same size without cropping them. How would I create a transparent UIImage and draw another on top?
Thanks for any hints.
Create a bitmap graphic context with CGBitmapContextCreate. You'll need to determine what the size of the resulting composite image here. You can think of this as a sort of canvas.
Draw the images using CGContextDrawImage. This will draw images onto the same context.
Once you're done drawing all the images into the same context, create an image from that context with CGBitmapContextCreateImage.
Convert the Core Graphics image from step #3 into a UIImage with [UIImage imageWithCGIImage:].
Code examples can be found here.
I am using the image picker controller to get an image from the user. After some operations on the image, I want the user to be able to save the image at 1600x1200 px, 1024x1024 px or 640x480 px (something like iFlashReady app).
The last option is the size of image I get in the UIImagePickerControllerDelegate method (when using image from camera roll)
Is there any way we can save the image at these resolutions without pixelating the images?
I tried creating a bitmap context with the width and height I want (CGBitmapContextCreate) and drawing the image there. But the image gets pixelated at 1600x1200.
Thanks
This is non-trivial. Your image just doesn't have enough data. To enlarge it you'll need to resample the image and interpolate between pixels (like photoshop when you resize an image).
Most likely you'll want to use a 3rd party library such as:
http://code.google.com/p/simple-iphone-image-processing/
This performs this and many other image processing functions.
From faint memories of computer vision class from long ago, I think what you do is to blur the image after the up-convert.
Before drawing try adjusting your CGBitmapContext's antialiasing and/or interpolation quality:
CGContextSetShouldAntialias( context, 1 == 1 )
CGContextSetInterpolationQuality( context, kCGInterpolationHigh ) ;
If I remember right, antialiasing is turned off on CGContext by default.