Procedurality.Channel.scaleLinear C# (CSharp) Method

scaleLinear() public method

public scaleLinear ( int new_width, int new_height ) : Channel
new_width int
new_height int
return Channel
		public Channel scaleLinear(int new_width, int new_height) {
			if (width == new_width && height == new_height) {
				return this;
			}
			Channel channel = new Channel(new_width, new_height);
			float x_coord = 0;
			float y_coord = 0;
			float val1 = 0;
			float val2 = 0;
			float height_ratio = (float)height/new_height;
			float width_ratio = (float)width/new_width;
			for (int y = 0; y < new_height; y++) {
				y_coord = y*height_ratio - 0.5f;
				int y_coord_lo = (int)y_coord;
				int y_coord_hi = y_coord_lo + 1;
				for (int x = 0; x < new_width; x++) {
					x_coord = x*width_ratio - 0.5f;
					int x_coord_lo = (int)x_coord;
					int x_coord_hi = x_coord_lo + 1;
					float x_diff = x_coord - x_coord_lo;
					val1 = Tools.interpolateLinear(getPixelWrap(x_coord_lo, y_coord_lo),
						getPixelWrap(x_coord_hi, y_coord_lo),
						x_diff);
					val2 = Tools.interpolateLinear(getPixelWrap(x_coord_lo, y_coord_hi),
						getPixelWrap(x_coord_hi, y_coord_hi),
						x_diff);
					channel.putPixel(x, y, Math.Max(Math.Min(Tools.interpolateLinear(val1, val2, y_coord - y_coord_lo), 1f), 0f));
				}
			}
			pixels = channel.getPixels();
			width = new_width;
			height = new_height;
			return this;
		}