Java Code Examples for com.jme3.texture.Image#setMipMapSizes()
The following examples show how to use
com.jme3.texture.Image#setMipMapSizes() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: MipMapGenerator.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 6 votes |
public static void resizeToPowerOf2(Image image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int potWidth = FastMath.nearestPowerOfTwo(image.getWidth()); int potHeight = FastMath.nearestPowerOfTwo(image.getHeight()); int potSize = Math.max(potWidth, potHeight); BufferedImage scaled = scaleDown(original, potSize, potSize); AWTLoader loader = new AWTLoader(); Image output = loader.load(scaled, false); image.setWidth(potSize); image.setHeight(potSize); image.setDepth(0); image.setData(output.getData(0)); image.setFormat(output.getFormat()); image.setMipMapSizes(null); }
Example 2
Source File: ImageToAwt.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 6 votes |
public static void createData(Image image, boolean mipmaps){ int bpp = image.getFormat().getBitsPerPixel(); int w = image.getWidth(); int h = image.getHeight(); if (!mipmaps){ image.setData(BufferUtils.createByteBuffer(w*h*bpp/8)); return; } int expectedMipmaps = 1 + (int) Math.ceil(Math.log(Math.max(h, w)) / LOG2); int[] mipMapSizes = new int[expectedMipmaps]; int total = 0; for (int i = 0; i < mipMapSizes.length; i++){ int size = (w * h * bpp) / 8; total += size; mipMapSizes[i] = size; w /= 2; h /= 2; } image.setMipMapSizes(mipMapSizes); image.setData(BufferUtils.createByteBuffer(total)); }
Example 3
Source File: MipMapGenerator.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 6 votes |
public static void resizeToPowerOf2(Image image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int potWidth = FastMath.nearestPowerOfTwo(image.getWidth()); int potHeight = FastMath.nearestPowerOfTwo(image.getHeight()); int potSize = Math.max(potWidth, potHeight); BufferedImage scaled = scaleDown(original, potSize, potSize); AWTLoader loader = new AWTLoader(); Image output = loader.load(scaled, false); image.setWidth(potSize); image.setHeight(potSize); image.setDepth(0); image.setData(output.getData(0)); image.setFormat(output.getFormat()); image.setMipMapSizes(null); }
Example 4
Source File: ImageToAwt.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 6 votes |
public static void createData(Image image, boolean mipmaps){ int bpp = image.getFormat().getBitsPerPixel(); int w = image.getWidth(); int h = image.getHeight(); if (!mipmaps){ image.setData(BufferUtils.createByteBuffer(w*h*bpp/8)); return; } int expectedMipmaps = 1 + (int) Math.ceil(Math.log(Math.max(h, w)) / LOG2); int[] mipMapSizes = new int[expectedMipmaps]; int total = 0; for (int i = 0; i < mipMapSizes.length; i++){ int size = (w * h * bpp) / 8; total += size; mipMapSizes[i] = size; w /= 2; h /= 2; } image.setMipMapSizes(mipMapSizes); image.setData(BufferUtils.createByteBuffer(total)); }
Example 5
Source File: MipMapGenerator.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 5 votes |
public static void generateMipMaps(Image image){ int width = image.getWidth(); int height = image.getHeight(); Image current = image; ArrayList<ByteBuffer> output = new ArrayList<ByteBuffer>(); int totalSize = 0; while (height >= 1 || width >= 1){ output.add(current.getData(0)); totalSize += current.getData(0).capacity(); if (height == 1 || width == 1) { break; } height /= 2; width /= 2; current = scaleImage(current, width, height); } ByteBuffer combinedData = BufferUtils.createByteBuffer(totalSize); int[] mipSizes = new int[output.size()]; for (int i = 0; i < output.size(); i++){ ByteBuffer data = output.get(i); data.clear(); combinedData.put(data); mipSizes[i] = data.capacity(); } combinedData.flip(); // insert mip data into image image.setData(0, combinedData); image.setMipMapSizes(mipSizes); }
Example 6
Source File: MipMapGenerator.java From jmonkeyengine with BSD 3-Clause "New" or "Revised" License | 4 votes |
public static void generateMipMaps(Image image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int width = original.getWidth(); int height = original.getHeight(); int level = 0; BufferedImage current = original; AWTLoader loader = new AWTLoader(); ArrayList<ByteBuffer> output = new ArrayList<ByteBuffer>(); int totalSize = 0; Format format = null; while (height >= 1 || width >= 1){ Image converted = loader.load(current, false); format = converted.getFormat(); output.add(converted.getData(0)); totalSize += converted.getData(0).capacity(); if(height == 1 || width == 1) { break; } level++; height /= 2; width /= 2; current = scaleDown(current, width, height); } ByteBuffer combinedData = BufferUtils.createByteBuffer(totalSize); int[] mipSizes = new int[output.size()]; for (int i = 0; i < output.size(); i++){ ByteBuffer data = output.get(i); data.clear(); combinedData.put(data); mipSizes[i] = data.capacity(); } combinedData.flip(); // insert mip data into image image.setData(0, combinedData); image.setMipMapSizes(mipSizes); image.setFormat(format); }
Example 7
Source File: MipMapGenerator.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 4 votes |
public static void generateMipMaps(Image image){ BufferedImage original = ImageToAwt.convert(image, false, true, 0); int width = original.getWidth(); int height = original.getHeight(); int level = 0; BufferedImage current = original; AWTLoader loader = new AWTLoader(); ArrayList<ByteBuffer> output = new ArrayList<ByteBuffer>(); int totalSize = 0; Format format = null; while (height >= 1 || width >= 1){ Image converted = loader.load(current, false); format = converted.getFormat(); output.add(converted.getData(0)); totalSize += converted.getData(0).capacity(); if(height == 1 || width == 1) { break; } level++; height /= 2; width /= 2; current = scaleDown(current, width, height); } ByteBuffer combinedData = BufferUtils.createByteBuffer(totalSize); int[] mipSizes = new int[output.size()]; for (int i = 0; i < output.size(); i++){ ByteBuffer data = output.get(i); data.clear(); combinedData.put(data); mipSizes[i] = data.capacity(); } combinedData.flip(); // insert mip data into image image.setData(0, combinedData); image.setMipMapSizes(mipSizes); image.setFormat(format); }
Example 8
Source File: TextureBlenderAWT.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 4 votes |
@Override public Image blend(Image image, Image baseImage, BlenderContext blenderContext) { this.prepareImagesForBlending(image, baseImage); float[] pixelColor = new float[] { color[0], color[1], color[2], 1.0f }; Format format = image.getFormat(); PixelInputOutput basePixelIO = null, pixelReader = PixelIOFactory.getPixelIO(format); TexturePixel basePixel = null, pixel = new TexturePixel(); float[] materialColor = this.materialColor; if (baseImage != null) { basePixelIO = PixelIOFactory.getPixelIO(baseImage.getFormat()); materialColor = new float[this.materialColor.length]; basePixel = new TexturePixel(); } int width = image.getWidth(); int height = image.getHeight(); int depth = image.getDepth(); if (depth == 0) { depth = 1; } ArrayList<ByteBuffer> dataArray = new ArrayList<ByteBuffer>(depth); float[] resultPixel = new float[4]; for (int dataLayerIndex = 0; dataLayerIndex < depth; ++dataLayerIndex) { ByteBuffer data = image.getData(dataLayerIndex); data.rewind(); ByteBuffer newData = BufferUtils.createByteBuffer(width * height * 4); int dataIndex = 0, x = 0, y = 0, index = 0; while (index < data.limit()) { // getting the proper material color if the base texture is applied if (basePixelIO != null) { basePixelIO.read(baseImage, dataLayerIndex, basePixel, x, y); basePixel.toRGBA(materialColor); } // reading the current texture's pixel pixelReader.read(image, dataLayerIndex, pixel, index); index += image.getFormat().getBitsPerPixel() >> 3; pixel.toRGBA(pixelColor); if (negateTexture) { pixel.negate(); } this.blendPixel(resultPixel, materialColor, pixelColor, blenderContext); newData.put(dataIndex++, (byte) (resultPixel[0] * 255.0f)); newData.put(dataIndex++, (byte) (resultPixel[1] * 255.0f)); newData.put(dataIndex++, (byte) (resultPixel[2] * 255.0f)); newData.put(dataIndex++, (byte) (pixelColor[3] * 255.0f)); ++x; if (x >= width) { x = 0; ++y; } } dataArray.add(newData); } Image result = depth > 1 ? new Image(Format.RGBA8, width, height, depth, dataArray) : new Image(Format.RGBA8, width, height, dataArray.get(0)); if (image.getMipMapSizes() != null) { result.setMipMapSizes(image.getMipMapSizes().clone()); } return result; }
Example 9
Source File: TextureBlenderLuminance.java From MikuMikuStudio with BSD 2-Clause "Simplified" License | 4 votes |
public Image blend(Image image, Image baseImage, BlenderContext blenderContext) { this.prepareImagesForBlending(image, baseImage); Format format = image.getFormat(); PixelInputOutput basePixelIO = null; TexturePixel basePixel = null; float[] materialColor = this.materialColor; if (baseImage != null) { basePixelIO = PixelIOFactory.getPixelIO(baseImage.getFormat()); materialColor = new float[this.materialColor.length]; basePixel = new TexturePixel(); } int width = image.getWidth(); int height = image.getHeight(); int depth = image.getDepth(); if (depth == 0) { depth = 1; } ArrayList<ByteBuffer> dataArray = new ArrayList<ByteBuffer>(depth); float[] resultPixel = new float[4]; float[] tinAndAlpha = new float[2]; for (int dataLayerIndex = 0; dataLayerIndex < depth; ++dataLayerIndex) { ByteBuffer data = image.getData(dataLayerIndex); data.rewind(); ByteBuffer newData = BufferUtils.createByteBuffer(width * height * 4); int dataIndex = 0, x = 0, y = 0; while (data.hasRemaining()) { // getting the proper material color if the base texture is applied if (basePixelIO != null) { basePixelIO.read(baseImage, dataLayerIndex, basePixel, x, y); basePixel.toRGBA(materialColor); } this.getTinAndAlpha(data, format, negateTexture, tinAndAlpha); this.blendPixel(resultPixel, materialColor, color, tinAndAlpha[0], blendFactor, blendType, blenderContext); newData.put(dataIndex++, (byte) (resultPixel[0] * 255.0f)); newData.put(dataIndex++, (byte) (resultPixel[1] * 255.0f)); newData.put(dataIndex++, (byte) (resultPixel[2] * 255.0f)); newData.put(dataIndex++, (byte) (tinAndAlpha[1] * 255.0f)); ++x; if (x >= width) { x = 0; ++y; } } dataArray.add(newData); } Image result = depth > 1 ? new Image(Format.RGBA8, width, height, depth, dataArray) : new Image(Format.RGBA8, width, height, dataArray.get(0)); if (image.getMipMapSizes() != null) { result.setMipMapSizes(image.getMipMapSizes().clone()); } return result; }