2013年10月22日火曜日

【アプリ開発】画像への描画

前回、【アプリ開発】背景画像の描画で背景画像の描画について紹介しました。


今回はそれを応用して、
画像に描画を行って別の画像を表示する方法を紹介します。


紹介する方法は実際にデータフォルダに使用している処理で、
以下の2点を紹介していきます。

 ・動画ファイルの画像に再生ボタンの描画
 ・ファイル画像に拡張子の描画


動画ファイルの画像に再生ボタンの描画


データフォルダでは、動画ファイルの画像を一覧で表示しますが、
その際画像には再生ボタンを描画して表示しています。




 /*******************************************
  * 動画の画像に再生ボタンを書き足す
  * 
  * @param Context ac
  * @param Bitmap image
  * @return none
  *******************************************/
 static public void DrawStartBitmapByVideoImage(Context ac, Bitmap image)
 {
  if(null != image)
  {
          Canvas csCanvas = new Canvas(image);
          Bitmap start = BitmapFactory.decodeResource(ac.getResources(), android.R.drawable.ic_media_play);
          Rect src = new Rect(0,0,start.getWidth(), start.getHeight());
          Rect dst = new Rect(image.getWidth()/4,image.getHeight()/4,image.getWidth()*3/4, image.getHeight()*3/4);
          csCanvas.drawBitmap(start, src, dst, new Paint());
  }
 }

上記の処理が画像への再生ボタンの書き込み関数のコードです。

static public void DrawStartBitmapByVideoImage(Context ac, Bitmap image)

この関数に再生ボタンを描画するBitmapを渡します。 
渡されたビットマップでCanvasクラスを生成して、
再生ボタン(android.R.drawable.ic_media_play)を画像サイズの大きさにあわせて描画します。


画像に再生ボタンを描画するとこのような感じになります。


再生ボタンは自分で用意したものに書き換えて使用するとより良いと思います。





ファイル画像に拡張子の描画


データフォルダでは、画像ファイルはその画像を表示して、
それ以外はファイル画像に拡張子を書き込んだ画像を表示しています。

 /*******************************************
  * 画像に拡張子を書き足す
  *
  * @param Bitmap image
  * @param String strExtension
  * @return none
  *******************************************/
 static public void DrawExtensionBitmapByFileImage(Bitmap image, String strExtension)
 {
  if(null != image)
  {
    Canvas canvasFile = new Canvas(image);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(Color.LTGRAY);
    paint.setTextSize(14);
    canvasFile.drawText("." + strExtension, 10 , image.getHeight()-7, paint);
  }
 }

上記の処理で画像に拡張子を直接 drawText で描画しています。

static public void DrawExtensionBitmapByFileImage(Context ac, Bitmap image, String strExtension)

関数にはファイル画像のBitmapと拡張子を渡します。
データフォルダでは、用意したファイル画像とファイルの拡張子を読み取って渡しています。

関数内では、渡されたBitmapでCanvasクラスを生成します。
PaintクラスにsetAntiAliasにtrueをセットして描画したほうが表示される文字はなめらかになります。



データフォルダでは、この方法のおかげで画像ファイルを拡張子ごとに用意しなくていいため、
少ないファイル画像で様々な拡張子のファイルを表示できるようになりました。


Canvasクラスに用意されている描画処理を使えば、
画像にそれなりの加工を加えられますので、アプリで画像を扱う場合に知っておくと便利になるかもしれません。

0 件のコメント:

コメントを投稿