メモです。
画像のタイプを変更することが最近多いとです。

DrawableからBitmapにしたり逆にしたりということなんですが
例えばBitmapをDrawableにするときは

new BitmapDrawable(Bitmap);

なんかを使ってます。
他にもLayerDrawableだったりNinePatchDrawableだったりStateListDrawableだったりと
たくさんあるわけで、こういうのは一概にBitmapDrawableでいけたりいけなかったり・・・
さらにいえばBitmapDrawableは昔に非推奨になってるのでいかがなもんかっていうのもあります。

なので色々めんどうなのでImageViewにぶっこんで変換で対応すればなんでもいけるよねって
いまさらながら気づきました。。

こんな感じ
Bitmap系 > Drawable
Context context;
ImageView imv = new ImageView(context);
  imv.setDrawingCacheEnabled(true);
imv.setImageBitmap(bitmap);
  imv.buildDrawingCache();
Drawable bitmap = imv.getDrawable();
Drawable系 > Bitmap
Context context;
ImageView imv = new ImageView(context);
  imv.setDrawingCacheEnabled(true);
imv.setImageDrawable(Drawable);
  imv.buildDrawingCache();
Bitmap bitmap = imv.getDrawingCache();
※この方法だとすでにViewに表示されてる場合以外はnullになってしまうらしい。
なので裏でnew してやっても意味ないらしいです。
なので以下に追記した「Drawable > Bitmap > スケーリング > Drawable」の方法
でいくとよし。。

Resource系 > Bitmap
Context context;
ImageView imv = new ImageView(context);
  imv.setDrawingCacheEnabled(true);
imv.setImageResource(Resource);
  imv.buildDrawingCache();
Bitmap bitmap = imv.getDrawingCache();
※この方法だとすでにViewに表示されてる場合以外はnullになってしまうらしい。
なので裏でnew してやっても意味ないらしいです。
なので以下に追記した「Drawable > Bitmap > スケーリング > Drawable」の方法
でいくとよし。。


Drawable > Bitmap > スケーリング > Drawable

Drawable image;//元のDrawable 
float w=1.0,h=1.0; //スケーリングするならこれ

ImageView v = new ImageView(context);

v.setLayoutParams(new LayoutParams(Math.round((float)image.getIntrinsicWidth()*w),Math.round((float)image.getIntrinsicHeight()*h)));
v.setImageDrawable(image); // setLayoutParams には wrap_contentとか使うとクラッシュする。ここでは実際に取得したサイズを指定する *スケーリングしたいサイズをここで一緒に書いちゃえばよし

Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width,  v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
 v.draw(c);
     
Drawable new_image = new BitmapDrawable(context.getResources(), b);

簡単に言えばコード上で各画像タイプに対応する画像セット(setImageBitmapとか)をして
あとはほしい画像タイプではきだせばいいって感じです。

ただ、追記しましたがDrawable > Bitmapは同様のほうほうだと条件が入る模様。
なので新しくついでにスケーリングもできるやつを書きました「Drawable > Bitmap > スケーリング > Drawable」の方法でBitmapに変換してるのでそれでならできると思います。

んで適宜、LayoutParamsをつけたりでサイズも編集できるかと。


というわけで今更ながらのメモでした。