Android画像処理のBitmap類
4907 ワード
http://www.open-open.com/lib/view/open1333418945202.html
BitmapはAndroidシステムにおける画像処理の最も重要なクラスの一つである.これにより、画像ファイル情報を取得したり、画像の切り取り、回転、スケールなどの操作を行い、フォーマットを指定して画像ファイルを保存することができます.本稿では,応用の観点から,Bitmapを用いてこれらの機能を実現する方法を重点的に紹介する.
一、Bitmapの生成
1.1 BitmapFactory decode出Bitmap
Bitmapはandroidで実現した.graphicsパッケージにあります.しかしBitmapクラスのコンストラクション関数はプライベートであり,外部ではインスタンス化できずJNIによるインスタンス化しかできない.これは必然的にある補助クラスがBitmapを作成するインタフェースを提供し、このクラスの実装はJNIインタフェースによってBitmapをインスタンス化し、このクラスはBitmapFactoryである.
図一、BitmapFactory主な方法及びOptionsオプション
BitmapFactoryを使用すると、指定したファイルからdecodeFile()を使用してBitmapを解くことができます.定義されたピクチャリソースでは,decodeResource()を用いてBitmapを解くこともできる.
1.2 decodeの場合のオプション
メソッドdecodeFile()/decodeResource()を使用する場合、BitmapFacotryを指定できます.Options.
Optionsの次のプロパティを使用して、decodeのオプションを指定します.
inPreferredConfigはdecodeをメモリに指定し、携帯電話で採用する符号化は、オプション値はBitmapに定義する.Config中.デフォルトはARGB_8888.
InJustDecodeBoundsがtrueに設定されている場合、画像のデータを完全に復号することはありません.すなわち、decodeXyz()の戻り値はnullですが、OptionsのoutAbcでは画像の基本情報が解かれています.
inSampleSize decode設定時のスケール.
Optionsのこれらの値を利用すると、効率的にサムネイルが得られます.
図2、BitmapFactory.decodeFile()
まずinJustDecodeBounds=trueを設定し、decodeFile()を呼び出して画像の基本情報を得る[Step 2~4];
画像の幅(または高さ、または統合)およびターゲットの幅を用いてinSampleSize値を求め、inJustDecodeBounds=falseを設定し、decodeFile()を呼び出して完全な画像データを得る[Step#5~8].
まずスケールを取得し、データを読み込み、大きなスケールで縮小した図を読み込むと、コンテンツリソースが大幅に節約されます.多くのサムネイルを読み込むこともありますが、この効果はさらに顕著になります.
二、BitmapとMatrixによる画像変換
BitmapはMatrixと組み合わせて画像の切り取り、回転、スケーリングなどの動作を実現することができる.
図三、Bitmap方法
ソースBitmapを変換して新しいBitmapを生成する方法:
第1の方法は最終的な実装であり、後の2つは第1の方法のパッケージにすぎない.
第2の方法は、ソースBitmapの指定された領域(x,y,width,height)から切り取りを実現するために1つのブロックを掘り出すことができる.第3の方法は、ソースBitmapをdstWidth x dstHeightのBitmapにスケーリングすることができる.
MatrixのRotate(setRotate()またはScale(setScale()を介して)を設定すると、最初のメソッドが入力され、回転またはスケールが実現されます.
図四、Bitmap実現回転
三、画像ファイルの保存
画像変換後のBitmapのデータは画像圧縮ファイルに保存できます(JPG/PNG).
図5、Bitmapデータをファイルに保存する
この操作の過程でBitmap.compress()メソッドのパラメータformatは、JPEGまたはPNGフォーマットを設定することができる.qualityは圧縮品質を選択することができる.fOutは出力ストリーム(OutputStream)であり、ここでFileOutputStreamはOutputStreamのサブクラスである.
まとめて、Bitmapの使い方を紹介します.Bitmapで画像ファイルの読み取りと書き込みを実現し、Bitmapで画像の剪断、回転、スケール変換を実現します.
BitmapはAndroidシステムにおける画像処理の最も重要なクラスの一つである.これにより、画像ファイル情報を取得したり、画像の切り取り、回転、スケールなどの操作を行い、フォーマットを指定して画像ファイルを保存することができます.本稿では,応用の観点から,Bitmapを用いてこれらの機能を実現する方法を重点的に紹介する.
一、Bitmapの生成
1.1 BitmapFactory decode出Bitmap
Bitmapはandroidで実現した.graphicsパッケージにあります.しかしBitmapクラスのコンストラクション関数はプライベートであり,外部ではインスタンス化できずJNIによるインスタンス化しかできない.これは必然的にある補助クラスがBitmapを作成するインタフェースを提供し、このクラスの実装はJNIインタフェースによってBitmapをインスタンス化し、このクラスはBitmapFactoryである.
図一、BitmapFactory主な方法及びOptionsオプション
BitmapFactoryを使用すると、指定したファイルからdecodeFile()を使用してBitmapを解くことができます.定義されたピクチャリソースでは,decodeResource()を用いてBitmapを解くこともできる.
1.2 decodeの場合のオプション
メソッドdecodeFile()/decodeResource()を使用する場合、BitmapFacotryを指定できます.Options.
Optionsの次のプロパティを使用して、decodeのオプションを指定します.
inPreferredConfigはdecodeをメモリに指定し、携帯電話で採用する符号化は、オプション値はBitmapに定義する.Config中.デフォルトはARGB_8888.
InJustDecodeBoundsがtrueに設定されている場合、画像のデータを完全に復号することはありません.すなわち、decodeXyz()の戻り値はnullですが、OptionsのoutAbcでは画像の基本情報が解かれています.
inSampleSize decode設定時のスケール.
Optionsのこれらの値を利用すると、効率的にサムネイルが得られます.
図2、BitmapFactory.decodeFile()
まずinJustDecodeBounds=trueを設定し、decodeFile()を呼び出して画像の基本情報を得る[Step 2~4];
画像の幅(または高さ、または統合)およびターゲットの幅を用いてinSampleSize値を求め、inJustDecodeBounds=falseを設定し、decodeFile()を呼び出して完全な画像データを得る[Step#5~8].
まずスケールを取得し、データを読み込み、大きなスケールで縮小した図を読み込むと、コンテンツリソースが大幅に節約されます.多くのサムネイルを読み込むこともありますが、この効果はさらに顕著になります.
二、BitmapとMatrixによる画像変換
BitmapはMatrixと組み合わせて画像の切り取り、回転、スケーリングなどの動作を実現することができる.
図三、Bitmap方法
ソースBitmapを変換して新しいBitmapを生成する方法:
1
public
static
Bitmap createBitmap(Bitmap source,
int
x,
int
y, intwidth,
int
height,
2
Matrix m,
boolean
filter)
3
public
static
Bitmap createBitmap(Bitmap source,
int
x,
int
y, intwidth,
int
height)
4
public
static
Bitmap createScaledBitmap(Bitmap src,
int
dstWidth,
5
int
dstHeight,
boolean
filter)
第1の方法は最終的な実装であり、後の2つは第1の方法のパッケージにすぎない.
第2の方法は、ソースBitmapの指定された領域(x,y,width,height)から切り取りを実現するために1つのブロックを掘り出すことができる.第3の方法は、ソースBitmapをdstWidth x dstHeightのBitmapにスケーリングすることができる.
MatrixのRotate(setRotate()またはScale(setScale()を介して)を設定すると、最初のメソッドが入力され、回転またはスケールが実現されます.
図四、Bitmap実現回転
三、画像ファイルの保存
画像変換後のBitmapのデータは画像圧縮ファイルに保存できます(JPG/PNG).
図5、Bitmapデータをファイルに保存する
この操作の過程でBitmap.compress()メソッドのパラメータformatは、JPEGまたはPNGフォーマットを設定することができる.qualityは圧縮品質を選択することができる.fOutは出力ストリーム(OutputStream)であり、ここでFileOutputStreamはOutputStreamのサブクラスである.
まとめて、Bitmapの使い方を紹介します.Bitmapで画像ファイルの読み取りと書き込みを実現し、Bitmapで画像の剪断、回転、スケール変換を実現します.