|
Author |
Topic: BImage resize (Read 366 times) |
|
cc
|
BImage resize
« on: Nov 20th, 2004, 10:27pm » |
|
I can't seem to resize a BImage after it has been allocated. More specifically, I would like to resize an array of BImages, but I can't even find how to do it with one? BImage[] imageset; imageset = new BImage[IMG_COUNT]; for (int i=0; i < IMG_COUNT; i++) imageset[i].resize ( nx, ny); // Am I missing something, or does this feature not exist yet? Rama
|
|
|
|
fjen
|
Re: BImage resize
« Reply #1 on: Nov 20th, 2004, 11:09pm » |
|
if it's not in the reference the most likely it's not there ... but sometimes there are hidden features like BGraphics: Code: BImage[] imageset; imageset = new BImage[IMG_COUNT]; for (int i=0; i < IMG_COUNT; i++) { BGraphics resized = new BGraphics(nx, ny); // new width, height resized.format = RGBA; // needed due to a bug resized.image( imageset[i], 0, 0, nx, ny ); //draw the image scaled imageset[i] = new BImage(resized); //put it back into the array } |
| /F
|
|
|
|
cc
|
Re: BImage resize
« Reply #2 on: Nov 20th, 2004, 11:59pm » |
|
This doesn't seem to work for me. I get the following error when I try the code above: "No applicable overload was found for a constructor of type "BImage". Perhaps you wanted the overloaded version 'BImage(java.awt.Image $1);' instead?". Seems like a 'type cast' issue, but I don't know how I would do this in Processing. Perhaps I am missing something.
|
|
|
|
fjen
|
Re: BImage resize
« Reply #3 on: Nov 21st, 2004, 3:50pm » |
|
right. i thought there was a constructor using BImage. then just do: imageset[i] = ( (BImage)resized ).copy(); btw: if all you images are same size you might consider moving the first two lines out of (before) the for-loop ... /F
|
|
|
|
TomC
|
Re: BImage resize
« Reply #4 on: Nov 21st, 2004, 5:34pm » |
|
I don't think you need to cast a BGraphics to BImage in order to call copy(), because the return type is what matters and it returns a BImage. Another way to do this is with replicate(). The following code loads an image and makes a 40x30 thumbnail of it. Code: BImage source = loadImage("whatever.jpg"); BImage thumb = new BImage(40,30); thumb.replicate(source,0,0,source.width-1,source.height-1,0,0,thumb.widt h-1,thumb.height-1); |
| (The '-1' bits are because replicate asks for the coordinates of the area to copy, not the width and height... I think this might/should change in the future to match the semantics of image, rect, etc. because it's not very intuitive - I should probably check with toxi that I got it right.) On update: not sure about those -1's. The documentation suggests one thing, and the actual behaviour suggests another... anyone know the source and care to clarify?
|
« Last Edit: Nov 21st, 2004, 5:39pm by TomC » |
|
|
|
|
fjen
|
Re: BImage resize
« Reply #5 on: Nov 21st, 2004, 6:03pm » |
|
yeah, i know about the return type. just wanted to make sure that in case BGraphics overloads copy (which it doesn't) you still get a BImage ... i don't know about replicate() in BImage ... i think it will be replaced in megabucket. /F
|
« Last Edit: Nov 21st, 2004, 6:04pm by fjen » |
|
|
|
|
TomC
|
Re: BImage resize
« Reply #6 on: Nov 21st, 2004, 6:58pm » |
|
on Nov 21st, 2004, 6:03pm, fjen wrote:yeah, i know about the return type. just wanted to make sure that in case BGraphics overloads copy (which it doesn't) you still get a BImage ... |
| I see. I think you have a couple of things mixed up then: Firstly, because BGraphics extends BImage it couldn't have a function called copy which had a different return type to copy in BImage. Secondly, I don't know for sure but I don't think there's any way to use BImage's definition of copy from a BGraphics instance. I don't think the way you did it would alter the behaviour. Try the following: Code: class MyImage { public MyImage copy() { println("MyImage.copy()"); return new MyImage(); } } class MyGraphics extends MyImage { public MyImage copy() { println("MyGraphics.copy()"); return new MyGraphics(); } } void setup() { size(100,100); } void draw() { MyImage img = new MyImage(); MyImage temp = img.copy(); MyGraphics gfx = new MyGraphics(); temp = gfx.copy(); temp = ((MyImage)gfx).copy(); } |
| You should get: Code: MyImage.copy() MyGraphics.copy() MyGraphics.copy() |
|
|
|
|
|
fjen
|
Re: BImage resize
« Reply #7 on: Nov 21st, 2004, 7:29pm » |
|
i see ... and it makes sense. i guess this leaves room to do some refresh on my fuzzy java-knowledge today ... thanks! /F
|
|
|
|
|