⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tiledimage.java

📁 java 3d 3
💻 JAVA
字号:
/*
 *	@(#)TiledImage.java 1.9 02/04/01 15:04:05
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * - Redistributions of source code must retain the above copyright
 *   notice, this list of conditions and the following disclaimer.
 *
 * - Redistribution in binary form must reproduce the above copyright
 *   notice, this list of conditions and the following disclaimer in
 *   the documentation and/or other materials provided with the
 *   distribution.
 *
 * Neither the name of Sun Microsystems, Inc. or the names of
 * contributors may be used to endorse or promote products derived
 * from this software without specific prior written permission.
 *
 * This software is provided "AS IS," without a warranty of any
 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
 * EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
 * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
 * DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
 * OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
 * FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR
 * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF
 * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE,
 * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * You acknowledge that Software is not designed,licensed or intended
 * for use in the design, construction, operation or maintenance of
 * any nuclear facility.
 */

import java.awt.*;
import java.awt.image.*;
import java.util.Vector;
import java.awt.color.ColorSpace;

public class TiledImage extends Object implements RenderedImage {
    
 
    WritableRaster[][] tile = new WritableRaster[3][3];
    
    WritableRaster bigTile;
    ComponentColorModel colorModel;
    BufferedImage checkBoard;
    int minX = -2;
    int minY = -1;

    TiledImage() {
	ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_sRGB); 
	int[] nBits = {8, 8, 8, 8};
	int i, j, k, cc = 255;
	int[] bandOffset = new int[4];
	colorModel =
	    new ComponentColorModel(cs, nBits, true, false, Transparency.OPAQUE, 0);
	// Create 9 tiles
	bandOffset[0] = 3;
	bandOffset[1] = 2;
	bandOffset[2] = 1;
	bandOffset[3] = 0;
	for (i = 0; i < 3; i++) {
	    for (j = 0; j < 3; j++) {
		tile[i][j] = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, 8, 8 , 32, 4, bandOffset, null);
	    }
	}

	// tile {-2, -1}
	byte[] byteData = ((DataBufferByte)tile[0][0].getDataBuffer()).getData();
	for (i=4, k = 8 * 4 * 4+4 * 4;i < 8;i++, k+= 16){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)cc; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}

	// tile {-1, -1}
	byteData = ((DataBufferByte)tile[1][0].getDataBuffer()).getData();
	for (i=4, k = 8 * 4 * 4;i < 8;i++){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)cc; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}

	// tile {1, -1}
	byteData = ((DataBufferByte)tile[2][0].getDataBuffer()).getData();
	for (i=4, k = 8 * 4 * 4;i < 8;i++, k+= 16){
	    for (j=0;j < 4;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}

	// tile {-2, 0}
	byteData = ((DataBufferByte)tile[0][1].getDataBuffer()).getData();
	for (i=0, k = 16;i < 4;i++, k+=16){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)cc; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}
	for (i=4, k = 8*4*4+16;i < 8;i++, k+=16){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)0 ;
	    }
	}
	// tile {-1, 0}
	byteData = ((DataBufferByte)tile[1][1].getDataBuffer()).getData();
	for (i=0, k = 0;i < 4;i++){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)cc; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}
	for (i=0, k = 8 * 4 * 4;i < 4;i++){
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)0 ;
	    }

	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)cc ;
	    }	    

	}


	// tile {0, 0}
	byteData = ((DataBufferByte)tile[2][1].getDataBuffer()).getData();
	for (i=0, k = 0;i < 4;i++, k+= 16) {
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)0;
		byteData[k+3] = (byte)cc ;
	    }
	}
	for (i=4, k = 8 * 4* 4;i < 8;i++, k+= 16) {
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)cc ;
	    }
	}
	
	    
	// tile {-2, 1}
	byteData = ((DataBufferByte)tile[0][2].getDataBuffer()).getData();
	for (i=4, k = 16;i < 8;i++, k+= 16) {
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)0 ;
	    }
	}


	// tile {-1, 1}
	byteData = ((DataBufferByte)tile[1][2].getDataBuffer()).getData();
	for (i=0, k = 0;i < 8;i++) {
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)0 ;
	    }
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)cc ;
	    }
	}



	// tile {0, 1}
	byteData = ((DataBufferByte)tile[2][2].getDataBuffer()).getData();
	for (i=4, k = 0;i < 8;i++, k+= 16) {
	    for (j=4;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
		byteData[k+1] = (byte)0; 
		byteData[k+2] = (byte)cc;
		byteData[k+3] = (byte)cc ;
	    }
	}
	
	bigTile =  Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, 16, 16 , 64, 4, bandOffset, null);;
        byteData = ((DataBufferByte)bigTile.getDataBuffer()).getData(); 
        for (i=0, k = 0;i < 8;i++){
            for (j=0;j < 8;j++, k+=4){
		byteData[k] = (byte)0;
                byteData[k+1] = (byte)cc; 
                byteData[k+2] = (byte)0;
                byteData[k+3] = (byte)cc ;
            } 
            for (;j < 16;j++, k+=4){ 
		byteData[k] = (byte)0;
                byteData[k+1] = (byte)0; 
                byteData[k+2] = (byte)0;
                byteData[k+3] = (byte)cc ;
            } 
        } 
        for (;i < 16;i++){
            for (j=0;j < 8;j++, k+=4){ 
		byteData[k] = (byte)0;
                byteData[k+1] = (byte)0; 
                byteData[k+2] = (byte)cc;
                byteData[k+3] = (byte)0;
            } 
            for (;j < 16;j++, k+=4){ 
		byteData[k] = (byte)0;
                byteData[k+1] = (byte)0; 
                byteData[k+2] = (byte)cc;
                byteData[k+3] = (byte)cc ;
            } 
        }
	checkBoard = new BufferedImage(colorModel, bigTile, false, null);
    }


    
    // create  four tiles {r, g, b, y}
    public WritableRaster copyData(WritableRaster raster) {
	return checkBoard.copyData(raster);
    }

    public ColorModel getColorModel() {
	return checkBoard.getColorModel();
    }

    public Raster getData() {
	return checkBoard.getData();
    }

    public Raster getData(Rectangle rect) {
	return checkBoard.getData(rect);
    }

    public int getHeight() {
	return 16;
    }

    public int getMinTileX() {
	return minX;
    }

    public int getMinTileY() {
	return minY;
    }

    public int getMinX () {
	return -8;
    }

    public int getMinY () {
	return -8;
    }

    public int getNumXTiles() {
	return 3;
    }

    public int getNumYTiles() {
	return 3;
    }

    public Object getProperty(String name) {
	return checkBoard.getProperty(name);
    }

    public String[] getPropertyNames() {
	return checkBoard.getPropertyNames();
    }


    public SampleModel getSampleModel() {
	return checkBoard.getSampleModel();
    }

    public Vector getSources() {
	return null;
    }

    public Raster getTile(int tileX, int tileY) {
	return tile[tileX- minX][tileY - minY];
    }

    public int getTileGridXOffset() {
	return 4;
    }

    public int getTileGridYOffset() {
	return -4;
    }


    public int getTileHeight() {
	return 8;
    }


    public int getTileWidth() {
	return 8;
    }

    public int getWidth() {
	return 16;
    }
}
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -