Scale2x - RealWorld forums

Log-in or register.

Scale2x

Is there any way to apply it automatically?
NEOC
on April 15th 2012

I want to be precise, so if an explainton is needed about that, visit this page

My question: Is there any way to apply Scale2x (or its derivates) automatically (with a plug-in or a javascript) or I should stop trying and resignate to do it manually?

Thanks beforehand.

Vlasta
on April 15th 2012

Here is a script adaptation of the scale2x algorithm:

var image = Document.RasterImage;
var sizeX = image.sizeX;
var sizeY = image.sizeY;

// create copy of the image with border pixels duplicated
var timg = Blender.CreateCanvas(sizeX+2, sizeY+2, 0);
Blender.Compose(timg, 1, 1, sizeX+1, sizeY+1, image, 0, 0, 0, Blender.OpSrc);
Blender.Compose(timg, 0, 1, 1, sizeY+1, image, 0, 0, 0, Blender.OpSrc);
Blender.Compose(timg, 1, 0, sizeX+1, 1, image, 0, 0, 0, Blender.OpSrc);
Blender.Compose(timg, sizeX+1, 1, sizeX+2, sizeY+1, image, sizeX-1, 0, 0, Blender.OpSrc);
Blender.Compose(timg, 1, sizeY+1, sizeX+1, sizeY+2, image, 0, sizeY-1, 0, Blender.OpSrc);
timg.SetPixel(0, 0, 0, 0, timg.GetPixel(1, 1, 0, 0));
timg.SetPixel(0, sizeY+1, 0, 0, timg.GetPixel(1, sizeY, 0, 0));
timg.SetPixel(sizeX+1, 0, 0, 0, timg.GetPixel(sizeX, 1, 0, 0));
timg.SetPixel(sizeX+1, sizeY+1, 0, 0, timg.GetPixel(sizeX, sizeY, 0, 0));

// double the size of the canvas of the original image
image.Resize(sizeX*2, sizeY*2, 1, 1, 0, 0, 0, 0);

// apply scale2x
for (var y = 0; y < sizeY; ++y)
{
	for (var x = 0; x < sizeX; ++x)
	{
		var B = timg.GetPixel(x+1, y, 0, 0);
		var D = timg.GetPixel(x, y+1, 0, 0);
		var E = timg.GetPixel(x+1, y+1, 0, 0);
		var F = timg.GetPixel(x+2, y+1, 0, 0);
		var H = timg.GetPixel(x+1, y+2, 0, 0);

		if (B != H && D != F)
		{
			image.SetPixel(x*2  , y*2  , 0, 0, D == B ? D : E);
			image.SetPixel(x*2+1, y*2  , 0, 0, B == F ? F : E);
			image.SetPixel(x*2  , y*2+1, 0, 0, D == H ? D : E);
			image.SetPixel(x*2+1, y*2+1, 0, 0, H == F ? F : E);
		}
		else
		{
			image.SetPixel(x*2  , y*2  , 0, 0, E);
			image.SetPixel(x*2+1, y*2  , 0, 0, E);
			image.SetPixel(x*2  , y*2+1, 0, 0, E);
			image.SetPixel(x*2+1, y*2+1, 0, 0, E);
		}
	}
}

Go to Effect->Custom operation... and paste the above code there replacing the original. If you want to use the custom operation icon on the toolbar, you may also want to comment out the code in the Configuration tab.

NEOC
on April 15th 2012

I know how to use custom operations, so that last explaintion isn't necessary.

But I am VERY thankful for this, it will save me a lot of work.

Thanks again, Vlasta! ;-)

Page views: 10592       Posts: 3      
What about ICL files?
Select background
I wish there were...