Coverage report

  %line %branch
tsukuba_bunko.peko.canvas.stage.ImageManager
0% 
0% 

 1  
 /*
 2  
  * All Rights Reserved.
 3  
  * Copyright (C) 1999-2005 Tsukuba Bunko.
 4  
  *
 5  
  * Licensed under the BSD License ("the License"); you may not use
 6  
  * this file except in compliance with the License.
 7  
  * You may obtain a copy of the License at
 8  
  *
 9  
  *       http://www.tsukuba-bunko.org/licenses/LICENSE.txt
 10  
  *
 11  
  * Unless required by applicable law or agreed to in writing, software
 12  
  * distributed under the License is distributed on an "AS IS" BASIS,
 13  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 14  
  * See the License for the specific language governing permissions and
 15  
  * limitations under the License.
 16  
  *
 17  
  * $Id: ImageManager.java,v 1.3 2005/08/06 15:42:48 ppoi Exp $
 18  
  */
 19  
 package tsukuba_bunko.peko.canvas.stage;
 20  
 
 21  
 import java.awt.Image;
 22  
 
 23  
 import java.awt.image.BufferedImage;
 24  
 
 25  
 import java.io.IOException;
 26  
 
 27  
 import java.net.URL;
 28  
 
 29  
 import javax.imageio.ImageIO;
 30  
 
 31  
 import tsukuba_bunko.peko.Logger;
 32  
 
 33  
 import tsukuba_bunko.peko.resource.ResourceManager;
 34  
 
 35  
 
 36  
 /**
 37  
  * 画像データを管理する機能を提供します。
 38  
  * @author	$Author: ppoi $
 39  
  * @version	$Revision: 1.3 $
 40  
  */
 41  
 public class ImageManager	{
 42  
 
 43  
 	/**
 44  
 	 * 唯一のインスタンス
 45  
 	 */
 46  0
 	private static ImageManager	_instance = null;
 47  
 
 48  
 
 49  
 	/**
 50  
 	 * <code>ImageManager</code> のインスタンスを作成します。
 51  
 	 */
 52  
 	protected ImageManager()
 53  
 	{
 54  0
 		super();
 55  0
 	}
 56  
 
 57  
 
 58  
 	/**
 59  
 	 * 画像をキャッシュから取得します。キャッシュにない場合は新規にロードされます。
 60  
 	 * @param	name	画像名
 61  
 	 * @return	画像データ
 62  
 	 */
 63  
 	public Image getImage( String name )
 64  
 	{
 65  0
 		return getImage( name, false );
 66  
 	}
 67  
 
 68  
 	/**
 69  
 	 * 画像をキャッシュから取得します。キャッシュにない場合は新規にロードされます。
 70  
 	 * @param	name	画像名
 71  
 	 * @return	画像データ
 72  
 	 */
 73  
 	public Image getImage( String name, boolean transparentize )
 74  
 	{
 75  0
 		BufferedImage	image = null;
 76  
 
 77  0
 		BufferedImage	source = null;
 78  
 		try	{
 79  0
 			Logger.debug( "[canvas.stage] start to load image \"" + name + "\"." );
 80  0
 			source = ImageIO.read( getURL(name) );
 81  0
 			Logger.debug( "[canvas.stage] finish to load image \"" + name + "\"." );
 82  
 		}
 83  0
 		catch( IOException ioe )	{
 84  0
 			Logger.debug( "[canvas.stage] fail to load image :" + name, ioe );
 85  0
 			return null;
 86  0
 		}
 87  
 
 88  0
 		if( transparentize )	{
 89  0
 			int	transColor = source.getRGB( 0, 0 );
 90  0
 			if( (transColor & 0xFF000000) != 0 )	{
 91  0
 				image = filterTransparentColor( source, transColor );
 92  0
 				source.flush();
 93  0
 			}
 94  
 			else	{
 95  0
 				image = source;
 96  
 			}
 97  0
 		}
 98  
 		else	{
 99  0
 			image = source;
 100  
 		}
 101  0
 		return image;
 102  
 	}
 103  
 
 104  
 	/**
 105  
 	 * 画像をキャッシュに戻します。
 106  
 	 */
 107  
 	public void putImage( String name, Image image )
 108  
 	{
 109  0
 		if( image != null )	{
 110  0
 			image.flush();
 111  
 		}
 112  0
 	}
 113  
 
 114  
 	/**
 115  
 	 * 画像名を URL に変換します。
 116  
 	 * @param	name	画像名
 117  
 	 * @return	画像ファイルの URL
 118  
 	 */
 119  
 	protected URL getURL( String name )
 120  
 	{
 121  0
 		ResourceManager	resources = ResourceManager.getInstance();
 122  
 		try	{
 123  0
 			return new URL( resources.getLocationResources().getImagesDirecotryURL(), name );
 124  
 		}
 125  0
 		catch( Exception e )	{
 126  0
 			Logger.error( "[scene.stage] fatal error!", e );
 127  0
 			return null;
 128  
 		}
 129  
 	}
 130  
 
 131  
 	/**
 132  
 	 * 指定された色を透明色としてフィルター処理した新しい画像を生成します。
 133  
 	 * @param	source	処理元の画像
 134  
 	 * @param	transColor	透過色
 135  
 	 * @return	処理結果の画像
 136  
 	 */
 137  
 	private BufferedImage filterTransparentColor( BufferedImage source, int transColor )
 138  
 	{
 139  0
 		Logger.debug( "[canvas.stage] start transparency filtering." );
 140  0
 		int	height = source.getHeight();
 141  0
 		int	width = source.getWidth();
 142  0
 		int	pixel = 0;
 143  0
 		BufferedImage	image = new BufferedImage( width, height, BufferedImage.TYPE_INT_ARGB );
 144  0
 		for( int y = 0; y < height; ++y )	{
 145  0
 			for( int x = 0;x < width; ++x )	{
 146  0
 				pixel = source.getRGB( x, y );
 147  0
 				if( pixel == transColor )	{
 148  0
 					image.setRGB( x, y, 0 );
 149  0
 				}
 150  
 				else	{
 151  0
 					image.setRGB( x, y , pixel );
 152  
 				}
 153  
 			}
 154  
 		}
 155  0
 		Logger.debug( "[canvas.stage] finish transparency filtering." );
 156  0
 		return image;
 157  
 	}
 158  
 
 159  
 
 160  
 	/**
 161  
 	 * 唯一の <code>ImageManager</code> インスタンスを取得します。
 162  
 	 * @return	<code>ImageManager</code> インスタンス
 163  
 	 */
 164  
 	public static ImageManager getInstance()
 165  
 	{
 166  0
 		if( _instance == null )	{
 167  0
 			synchronized( ImageManager.class )	{
 168  0
 				if( _instance == null )	{
 169  0
 					_instance = new ImageManager();
 170  
 				}
 171  0
 			}
 172  
 		}
 173  0
 		return _instance;
 174  
 	}
 175  
 }

This report is generated by jcoverage, Maven and Maven JCoverage Plugin.