ステイホームが続く今できる「最新プロモーション」をご紹介! 「Instagram×ARxプロモーション」WEBセミナー...
Canvasに拡大縮小した画像を描画する方法は、 Matrixをつかってscaleを調整した画像をCanvasに描画するのが一般的かと思います。 ところが、Matrixでscaleを調整した画像はエッジのところがジャギーっぽくになってしまいました。 そこで、PaintのAntiAliasをオンにしてみたり試して見ましたが、あまり変わりませんでした。 日本Androidの会ではLanczosやBicubicを実装して試してみた方もいらしゃったようです。 画像をきれいに縮小する方法 しかし、ImageViewにBitmapを入れて拡大縮小してもあまりジャギーが気になったことがないのを思い出し、 ImageViewのonDrawの実装を眺めていると以下のことに気づきました。 Canvas.drawBitmap()ではなくBitmapDrawable.draw()で描画している。 さらにB
Android で画像を読み込むのは結構厄介。一つの ImageView に読み込むならそんなに悩まないけど、 ListView やら GridView やらで画像を扱うとすぐ OutOfMemory って怒られる。限られた資源、守りたいですね。 基本は BitmapFactory.Options.inJustDecodeBounds = true にして、画像の情報だけを とって BitmapFactory.Options.inSampleSize を適切にしてあげて全体を無難に読み込む。そうじゃなくて、大きな画像の一部を切り抜いてもいいんじゃないかと。そんな画像切り抜き BitmapRegionDecoder クラスというのがあります。 とりあえずサンプルは Github に上げた。 読み込み画像の読み込みはバックグラウンドで行うのが基本。AsyncTaskLoader で行なっている
Android SDK 2.3.3(API レベル10)からBitmapRegionDecoderクラスが追加されました。 BitmapRegionDecoderクラスは用意した画像(JPEG形式,PNG形式)を任意の矩形で切り抜いてBitmapクラスを取得することができます。 それでは続きへどうぞ BitmapFactoryクラス まずは今までと同じ方法で読み込んでみます。画像ファイルを読み込んでBitmapクラスを生成するにはBitmapFactoryクラスのdecodeFileメソッドやdecodeResourceメソッドを利用します。 File file = Environment.getExternalStorageDirectory(); ImageView imageView = (ImageView)findViewById(R.id.imageView); Bitmap
描画を行った内容を画面としてではなく、画像として扱いたい場合があります。 そのような場合にBitmapを使うことで描画した内容を画像として扱うことができるようになります。 方法としてはCanvasクラスのコンストラクタにBitmapクラスのインスタンスを与えます。そうすることでこのCanvasオブジェクトに描画した内容は画面ではなくBitmapに描画されることになります。 このBitmapを介して画像として描画内容を扱うことができます。 それではBitmapに丸を描画しImageViewで表示させて見ます public class MainActivity extends Activity implements OnTouchListener{ @Override public void onCreate(Bundle savedInstanceState) { super.on
今の端末だと10Mピクセルを越えるカメラを搭載した端末が普通になってきており、そのファイルサイズも数MBに及びます。 AndroidでBitmapFactoryを利用してフォトライブラリーから画像を読み込んだりすると思いますが、そのままその画像を読み込んでしまうと、しばしばOutOfMemoryとなりアプリが強制終了してしまいます。 そこで、実際に画像を読み込む前にある程度縮小してから読み込むことで、メモリが足りなくなることを防ごうというのが今回のネタです。 BitmapFactory.OptionsのinSampleSizeを指定して画像を縮小した状態で読み込む 処理の流れ的にはまず画像のサイズを取得して、サイズが大きかったら縮小指定してから読み込もう、という感じです。 InputStream inputStream = getContentResolver().openInputStr
描画領域をクリップすると、クリップされた領域のみが描画対象になります。 クリップする領域を指定するCanvasクラスのメソッド 以下のCanvasクラスのメソッドを使って、クリップする領域を指定します。 boolean clipRect(float left, float top, float right, float bottom) float型の引数left, top, right, bottomで指定された矩形領域を、Region.Op.INTERSECTでクリップします。 boolean clipRect(float left, float top, float right, float bottom, Region.Op op) float型の引数left, top, right, bottomで指定された矩形領域を、Region.Opの指定に従ってクリップします。 boolea
drawBitmapメソッドの簡単なサンプル CanvasクラスのdrawBitmapメソッドを使って、Bitmapを描画する事ができます。 以下に、drawBitmapメソッドを使ってBitmapを描画する、簡単なサンプルを示します。 このプログラムを実行するには、res/drawableデレクトリに、画像ファイルsample.JPGが保存されている必要があります。 画像ファイルは、JPGだけでなくBMP,PNG,GIFも表示可能なようです。 BitmapFactory.decodeResourceメソッドは、res/drawableデレクトリの画像ファイルを、Bitmapオブジェクトとして取得するメソッドです。 drawBitmapメソッドは、CanvasにBitmapオブジェクトを描画するメソッドで、引数の意味については、次の「drawBitmapメソッドのオーバロードメソッド」を参
過去にTechBoosterでは、Canvasを使ったノウハウを公開しています。 Viewをカスタマイズ(独自実装)する ScaleGestureDetectorを使ってピンチイン、ピンチアウトを認識する Canvasの状態を保存/復帰させる 本エントリでは、CanvasにBitmapを表示する際にMatrixクラスを用いて簡易に加工(移動/回転/拡大縮小/歪み)を行う方法を紹介します。 Matrixクラスを使ってBitmapを加工することで、図形のドラッグによる移動や、ピンチアウトによる拡大などタッチパネルを持つデバイスならではの操作感を持たせることが可能となります。 ※タッチパネル上のジェスチャー(フリックやピンチアウトなど)に関する記事は以下を参考にどうぞ。 ScaleGestureDetectorを使ってピンチイン、ピンチアウトを認識する それでは続きをどうぞ。 CanvasへのB
AndroidはOSもマーケットもオープンなので、将来的には他者に負けまいと各メーカー独自のAPIが用意され、マーケット側でも差別化のために独自のAPIが整備され、選択肢が増える反面、一括で対応するのはほぼ不可能になり、市場は細切れになっていくんだろうなぁという気がしているdaichi1128です。 さて、今回はAndroidのデータベースアクセスの肝になるContentResolverを使ったSDカードへの画像保存をやってみます。 目標はギャラリーに表示させるところまで。 カメラ画像として保存する Androidのギャラリーアプリ内でカメラフォルダの中に画像を保存する方法です。 早速コードから。 public class ImageManager { public static Uri addImageAsCamera(ContentResolver cr, Bitmap bitmap
Android は独自の2Dグラフィックライブラリ、および OpenGL ES 1.0 を使ったハイパフォーマンスの3Dグラフィックをサポートしています。 二つの選択 2Dグラフィックを描画するとき、大きく分けて二つの方法があります。 View View オブジェクトにグラフィックやアニメーションを描画します。 この方法では、View が持つ一般的な描画規則に基づいて描画を行います。 Canvas Canvas に直接グラフィックを描画します。 この方法では、draw() や drawPicture() のメソッドを状況に応じて呼び出す必要があります。 View に描く方法は、動的に変化しないシンプルなグラフィックを描きたいときには最適な選択となります。 Canvas に描く方法は、アプリケーションが定期的な再描画を要求するときは良い選択となります。 一般的に多くのビデオゲームは Canv
We make society rich ITは今や、企業活動ならびに個人の生活からも切り離せないほどの大きな存在となっています。 ITの技術向上は、間違いなく社会を豊かにすることにつながるものと考えております。 SORICHは、ITにおける技術向上、クオリティ向上をめざし、社会に大きく貢献してまいります。 開発実績 Development record FX取引システム 金融 Java JavaScript MySQL 大規模なトランザクション処理が要求されるプライスボート、注文機能等、リアルタイム性の高いフロントシステム開発に加え、法廷帳簿出力を含めたバック業務システムなど、FX事業を運営する上で必要となる包括的なシステムを供給。 非常に高い品質を求められるシステムのため、ミスが許されないというプレッシャーの毎日でした。 レンタル端末在庫管理 IT Java PHP JavaScrip
« Android での起動時間 | メイン | InterCodeContext を分離 » 2012年01月03日 吉里吉里Java:: OutOfMemory対策 Tweet @jin1016をフォロー Android で画像を読み込んだり、生成した時によく発生する OutOfMemoryError 。 本当にメモリが足りない時はどうしようもないが、解放されずに残っているオブジェクト等の影響で確保に失敗することがある。 このような状況を避けるためには、単純に以下のようにして1度目は OutOfMemoryError 例外をキャッチして、GC を実行し、再度確保を試みるようにすれば、成功することが多い。 当然、自身で多くのメモリを使用している場合はどうしようもない。 try { mImage = Bitmap.createBitmap( w, h, Bitmap.Config.A
Loading Large Bitmaps Efficiently の内容なのですが、補足も入れてメモっておきます。 端的にいうと、 実際に表示するサイズより大きい Bitmap を読みこむのはメモリの無駄 (拡大させるとかなら話は別だけど) ・高解像度のカメラで取られた写真は往々にしてディスプレイのピクセルサイズより大きい ・サムネイルとして使うのに元のサイズのまま読み込むのはばかげてる ・大きいサイズの Bitmap をメモリに展開したら OutOfMemoryException になる ステップとしては3つ 1. メモリに Bitmap 展開せずに、サイズや MimeType だけを取得する 2. 1. の情報をもとにサブサンプルにサイズを決める 3. 2. で決めたサブサンプルで Bitmap をメモリに読み込む 1. メモリに Bitmap 展開せずに、サイズや MimeType
つまり、以下のコードでピクセル毎にRGBカラーを取得できるということですね。 red = (pixels[i] & 0x00FF0000) >> 16; green = (pixels[i] & 0x0000FF00) >> 8; blue = (pixels[i] & 0x000000FF); つぎに、配列をJavaからC言語に渡すときの説明。。。。 この処理をC言語で行いたいために、この第1引数のint配列をJavaからC言語に渡せればいいですね。方法は以下のようにしました。 ・Java言語側 //画像を取得する Resources r = getResources(); Bitmap bitmap = BitmapFactory.decodeResource(r, R.drawable.sea); //画像を表示する imageView.setImageBitmap(myBitma
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く