Advertisement
NoneyaBiznazz

LayeredAssetsBitmapTextureAtlasSource

Jul 6th, 2016
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.63 KB | None | 0 0
  1. package com.smiths;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.ArrayList;
  5.  
  6. import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
  7. import org.andengine.opengl.texture.atlas.bitmap.source.IBitmapTextureAtlasSource;
  8. import org.andengine.opengl.texture.atlas.source.BaseTextureAtlasSource;
  9. import org.andengine.util.StreamUtils;
  10. import org.andengine.util.debug.Debug;
  11.  
  12. import android.content.Context;
  13. import android.graphics.Bitmap;
  14. import android.graphics.BitmapFactory;
  15. import android.graphics.Canvas;
  16.  
  17.  
  18. import android.graphics.Color;
  19. import android.graphics.ColorFilter;
  20. import android.graphics.LightingColorFilter;
  21. import android.graphics.Paint;
  22. import android.graphics.Bitmap.Config;
  23. import android.graphics.Point;
  24.  
  25. public class LayeredAssetsBitmapTextureAtlasSource extends BaseTextureAtlasSource implements IBitmapTextureAtlasSource
  26. {
  27. private final Context mContext;
  28. int r;
  29. int g;
  30. int b;
  31. private final String mBaseAssetPath;
  32. private final ArrayList<AssetLayer> mAssetLayers = new ArrayList<AssetLayer>();
  33. private final ArrayList<Integer> mR = new ArrayList<Integer>();
  34. private final ArrayList<Integer> mG = new ArrayList<Integer>();
  35. private final ArrayList<Integer> mB = new ArrayList<Integer>();
  36.  
  37. // ===========================================================
  38. // Constructors
  39. // ===========================================================
  40.  
  41. public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath)
  42. {
  43. this(context, pBaseAssetPath, 0, 0);
  44. }
  45.  
  46. public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final int pTexturePositionX, final int pTexturePositionY)
  47. {
  48. this(context, pBaseAssetPath, pTexturePositionX, pTexturePositionY, getDimensions(context, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + pBaseAssetPath));
  49. }
  50.  
  51. public LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final int pTexturePositionX, final int pTexturePositionY, final Point pSize)
  52. {
  53. super(pTexturePositionX, pTexturePositionY, pSize.x, pSize.y);
  54. this.mContext = context;
  55. this.mBaseAssetPath = pBaseAssetPath;
  56. // BitmapTextureAtlasTextureRegionFactory.setAssetBasePath(pBaseAssetPath);
  57. }
  58.  
  59. private LayeredAssetsBitmapTextureAtlasSource(final Context context, final String pBaseAssetPath, final ArrayList<AssetLayer> assetLayers, final int pTexturePositionX, final int pTexturePositionY, final int pWidth, final int pHeight)
  60. {
  61. super(pTexturePositionX, pTexturePositionY, pWidth, pHeight);
  62. this.mContext = context;
  63. this.mBaseAssetPath = pBaseAssetPath;
  64. for (int i = 0; i < assetLayers.size(); i++)
  65. mAssetLayers.add(assetLayers.get(i));
  66. }
  67.  
  68.  
  69. public void clearAssetLayer(){
  70. mAssetLayers.clear();
  71. }
  72.  
  73.  
  74. public boolean addLayer(final String layerPath, final float xOffset, final float yOffset, int R, int G, int B)
  75. {
  76. if (mBaseAssetPath == null)
  77. return false;
  78. this.mR.add(R);
  79. this.mG.add(G);
  80. this.mB.add(B);
  81.  
  82. final Point size = getDimensions(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + layerPath);
  83. // if (mTextureWidth < (size.x + xOffset) || mTextureHeight < (size.y + yOffset))
  84. // return false;
  85. mAssetLayers.add(new AssetLayer(layerPath, xOffset, yOffset));
  86. return true;
  87. }
  88.  
  89. public boolean addLayer(final String layerPath, final float xOffset, final float yOffset)
  90. {
  91. if (mBaseAssetPath == null)
  92. return false;
  93. this.mR.add(-1);
  94. this.mG.add(-1);
  95. this.mB.add(-1);
  96.  
  97. final Point size = getDimensions(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + layerPath);
  98. // if (mTextureWidth < (size.x + xOffset) || mTextureHeight < (size.y + yOffset))
  99. // return false;
  100. mAssetLayers.add(new AssetLayer(layerPath, xOffset, yOffset));
  101. return true;
  102. }
  103.  
  104.  
  105.  
  106.  
  107. @Override
  108. public LayeredAssetsBitmapTextureAtlasSource deepCopy()
  109. {
  110. return new LayeredAssetsBitmapTextureAtlasSource(this.mContext, this.mBaseAssetPath,
  111. this.mAssetLayers, this.mTextureX, this.mTextureY, this.mTextureWidth, this.mTextureHeight);
  112. }
  113.  
  114. // ===========================================================
  115. // Methods for/from SuperClass/Interfaces
  116. // ===========================================================
  117.  
  118. @Override
  119. public Bitmap onLoadBitmap(final Config pBitmapConfig)
  120. {
  121. final Bitmap image = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + this.mBaseAssetPath);//mBaseAssetPath);
  122. if (image == null)
  123. return null;
  124.  
  125. final Bitmap bitmap = Bitmap.createBitmap(mTextureWidth, mTextureHeight, Bitmap.Config.ARGB_8888);
  126. final Canvas canvas = new Canvas(bitmap);
  127. canvas.drawBitmap(image, 0f, 0f, null);
  128. for (int i = 0; i < mAssetLayers.size(); i++)
  129. {
  130. Paint p = new Paint();
  131.  
  132.  
  133.  
  134. if((mR.get(i) > -1)&&(mG.get(i)>-1)&&(mB.get(i)>-1))
  135. {
  136. int color = Color.rgb(mR.get(i), mG.get(i), mB.get(i));
  137.  
  138.  
  139. ColorFilter filter = new LightingColorFilter(color, 0);
  140. p.setColorFilter(filter);
  141. }
  142. else
  143. {
  144. p = null;
  145. }
  146.  
  147. final AssetLayer al = mAssetLayers.get(i);
  148. final Bitmap layer = BitmapFromAsset(mContext, BitmapTextureAtlasTextureRegionFactory.getAssetBasePath() + al.mAssetPath);
  149. canvas.drawBitmap(layer, al.mXOffset, al.mYOffset, p);
  150. }
  151. return bitmap;
  152. }
  153.  
  154. public Bitmap onLoadBitmap(Config pBitmapConfig, boolean pMutable) {
  155. return onLoadBitmap(pBitmapConfig);
  156. }
  157.  
  158. // ===========================================================
  159. // Private Methods
  160. // ===========================================================
  161.  
  162. private Bitmap BitmapFromAsset(final Context context, final String assetPath)
  163. {
  164. InputStream in = null;
  165. Bitmap bitmap = null;
  166. try
  167. {
  168. in = context.getAssets().open(assetPath);
  169. bitmap = BitmapFactory.decodeStream(in, null, null);
  170. }
  171. catch (final IOException e)
  172. {
  173. Debug.e("Failed loading Bitmap in BitmapFromAsset. AssetPath: " + assetPath, e);
  174. }
  175. finally
  176. {
  177. StreamUtils.close(in);
  178. }
  179. return bitmap;
  180. }
  181.  
  182. private static Point getDimensions(final Context context, final String pAssetPath)
  183. {
  184. final BitmapFactory.Options decodeOptions = new BitmapFactory.Options();
  185. decodeOptions.inJustDecodeBounds = true;
  186.  
  187. InputStream in = null;
  188. Point size = null;
  189. try
  190. {
  191. in = context.getAssets().open(pAssetPath);
  192. BitmapFactory.decodeStream(in, null, decodeOptions);
  193. size = new Point(decodeOptions.outWidth, decodeOptions.outHeight);
  194. }
  195. catch (final IOException e)
  196. {
  197. Debug.e("Failed loading Bitmap in LayeredAssetsBitmapTextureAtlasSource. AssetPath: " + pAssetPath, e);
  198.  
  199. }
  200. finally
  201. {
  202. StreamUtils.close(in);
  203. }
  204. return size;
  205. }
  206.  
  207. private class AssetLayer
  208. {
  209. public final String mAssetPath;
  210. public final float mXOffset;
  211. public final float mYOffset;
  212. public AssetLayer(final String assetPath, final float xOffset, final float yOffset)
  213. {
  214. mAssetPath = assetPath;
  215. mXOffset = xOffset;
  216. mYOffset = yOffset;
  217. }
  218. }
  219.  
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement