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/18 05:14
2020/06/18 06:48
2020/06/18 14:33