質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

3211閲覧

画像を切り取って表示したい android studio

1236

総合スコア19

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2020/06/17 14:19

編集2020/06/17 14:22

フリー素材画像を使用したいのですが、1枚に複数の素材が含まれているチップ画像をどのように使えば良いかわかりません。bitmapで画像を切り取って表示できることはわかりましたが、runするとアプリが落ちてしまいます。

java

1// ResourceからBitmapを生成 2 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.player); 3 Canvas canvas = new Canvas(); 4 5 player.setImageBitmap(bitmap); 6 7 int w = bitmap.getWidth(); 8 int h = bitmap.getHeight(); 9 // 描画元の矩形イメージ 10 Rect src = new Rect(0, 0, w/2, h/2); 11 // 描画先の矩形イメージ 12 Rect dst = new Rect(0, 100, w/2, 100 + h/2); 13 canvas.drawBitmap(bitmap, src, dst, null); 14

補足情報(FW/ツールのバージョンなど)

コードはoncreate内にあります。
new Canvas()のせいのように思いましたが改善策がわかりませんでした。

素材画像を切り取って使うことはよくあることだと思いますが、一般的によく行われる使用方法があれば教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Construct an empty raster canvas. Use setBitmap() to specify a bitmap to draw into. The initial target density is Bitmap#DENSITY_NONE; this will typically be replaced when a target bitmap is set for the canvas.

「empty raster canvas」だから、引数なしでCanvasを作って絵を書いても、空中で筆を動かしているようなものです。
コンストラクタでBitmapを渡すか、先に書いてあるとおりsetBitmapメソッドでBitmapを指定するかしないといけないのではないでしょうか。

…と思ってBitmapの作成方法を調べていたら、単純にBitmap#createBitmapでcropできるじゃないですか。

(只今絶賛kotlin勉強中期間なので、kotlinで書きます)

kotlin

1package com.example.test0617b 2 3import android.os.Bundle 4import androidx.appcompat.app.AppCompatActivity 5import android.widget.ImageView 6import android.graphics.BitmapFactory 7import android.graphics.Bitmap 8 9class MainActivity : AppCompatActivity() 10{ 11 override fun onCreate(savedInstanceState: Bundle?) 12 { 13 super.onCreate(savedInstanceState) 14 this.setContentView(R.layout.main_activity) 15 16 val imageView = this.findViewById<ImageView>(R.id.image) 17 val srcBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.sample01) 18 val width = srcBitmap.getWidth() 19 val height = srcBitmap.getHeight() 20 val bitmap = Bitmap.createBitmap(srcBitmap, width / 4, height / 4, width / 2, height / 2) 21 imageView.setImageBitmap(bitmap) 22 } 23} 24

元の画像(いらすとやより)

元画像

実行結果。

イメージ説明


上のサンプルコードに、

kotlin

1 //val bitmap2 = Bitmap.createScaledBitmap(bitmap, 100, 100, true); 2 val bitmap2 = Bitmap.createScaledBitmap(bitmap, 200, 200, true); 3 Log.d("test0617b", String.format("size %d, %d -> %d, %d.", bitmap.getWidth(), bitmap.getHeight(), bitmap2.getWidth(), bitmap2.getHeight()))

というコードを加えて実行すると、

06-18 21:33:24.470 4763 4763 D test0617b: size 1435, 1435 -> 100, 100. 06-18 21:34:52.546 5212 5212 D test0617b: size 1435, 1435 -> 200, 200.

というログが出力されますから、Bitmap#createScaledBitmapで指定したサイズになるのは間違いありません。

投稿2020/06/17 15:11

編集2020/06/18 12:39
katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1236

2020/06/18 05:14

Bitmap.createBitmapは知りませんでした。無事表示させることができました。ありがとうございました。
1236

2020/06/18 06:48

切り取った画像は無事表示できたのですが、サイズの変更がうまくいきません。Bitmap.createScaledBitmap() の引数 dstWidth, dstHeightを100, 100にしても200, 200にしても同じ大きさです。100x100, 200x200という解釈は間違ってますか? public class MainActivity extends AppCompatActivity { private ImageView player; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); player = findViewById(R.id.player); // ResourceからBitmapを生成 Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.player); player.setImageBitmap(bitmap); int w = bitmap.getWidth(); int h = bitmap.getHeight(); Bitmap bitmaps = Bitmap.createBitmap(bitmap, 0, 0, w / 3, h / 4); Bitmap bitmapss = Bitmap.createScaledBitmap(bitmaps, 100, 100, true); player.setImageBitmap(bitmapss); } }
1236

2020/06/18 14:33

xmlでサイズを指定していたことが原因でした。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問