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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

1849閲覧

java(ktファイル)のソースの意味がわからない

2r4h8k3m

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2021/05/06 22:42

初歩的な問題だと思うのですが、こちらのMainActivity.ktファイルに頻繁に出てくる:というのはどういう意味を持つのでしょうか?良ければ回答お願いいたします。

var bitmap: Bitmap = Bitmap.createScaledBitmap(getBitmapFromImageView(src_img1), 640, 480, false)などのbitmapの後に使われている記号です。

import android.app.Activity import android.content.Intent import android.graphics.Bitmap import android.graphics.BitmapFactory import android.graphics.drawable.BitmapDrawable import android.net.Uri import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.os.ParcelFileDescriptor import android.util.Log import android.widget.ImageView import kotlinx.android.synthetic.main.activity_main.* import org.opencv.android.OpenCVLoader import org.opencv.android.Utils import org.opencv.core.* import org.opencv.features2d.AKAZE import org.opencv.features2d.DescriptorMatcher import org.opencv.features2d.Features2d import org.opencv.imgproc.Imgproc import java.io.FileDescriptor import java.io.IOException class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) if(!OpenCVLoader.initDebug()) { Log.d("OpenCV", "error_openCV") } // 画像選択ボタン1のリスナー select_img1_btn.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.setType("*/*") startActivityForResult(intent, RESULT_PICK_IMAGEFILE1) } // 画像選択ボタン2のリスナー select_img2_btn.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.setType("*/*") startActivityForResult(intent, RESULT_PICK_IMAGEFILE2) } // 決定ボタンのリスナー decition_btn.setOnClickListener { try { // src_img1の画像をMatに var bitmap: Bitmap = Bitmap.createScaledBitmap(getBitmapFromImageView(src_img1), 640, 480, false) val scene1 = Mat(bitmap!!.height, bitmap!!.width, CvType.CV_8UC1).apply { Utils.bitmapToMat(bitmap, this) } // src_img2の画像をMatに bitmap = Bitmap.createScaledBitmap(getBitmapFromImageView(src_img2), 640, 480, false) val scene2 = Mat(bitmap!!.height, bitmap!!.width, CvType.CV_8UC1).apply { Utils.bitmapToMat(bitmap, this) } // アルゴリズムはAKZEで val algorithm: AKAZE = AKAZE.create() // 特徴点抽出 val keypoint1 = MatOfKeyPoint().apply { algorithm.detect(scene1, this) } val keypoint2 = MatOfKeyPoint().apply { algorithm.detect(scene2, this) } // 特徴量記述 val descriptor1 = Mat().apply { algorithm.compute(scene1, keypoint1, this) } val descriptor2 = Mat().apply { algorithm.compute(scene2, keypoint2, this) } // マッチング (アルゴリズムにはBruteForceを使用) val matcher = DescriptorMatcher.create("BruteForce") var matches_list: MutableList<DMatch> = mutableListOf() val match12 = MatOfDMatch().apply { matcher.match(descriptor1, descriptor2, this) } val match21 = MatOfDMatch().apply { matcher.match(descriptor2, descriptor1, this) } // クロスチェック(1→2と2→1の両方でマッチしたものだけを残して精度を高める) val size: Int = match12.toArray().size - 1 val match12_array = match12.toArray() val match21_array = match21.toArray() var count: Int = 0 for(i in 0..size) { val forward: DMatch =match12_array[i] val backward: DMatch = match21_array[forward.trainIdx] if(backward.trainIdx == forward.queryIdx) { matches_list.add(forward) count++ } } val matches = MatOfDMatch().apply { this.fromList(matches_list) } // 結果画像の背景真っ黒になるのを防ぐ val scene1rgb = Mat().apply { Imgproc.cvtColor(scene1, this, Imgproc.COLOR_RGBA2RGB, 1) } val scene2rgb = Mat().apply { Imgproc.cvtColor(scene2, this, Imgproc.COLOR_RGBA2RGB, 1) } // マッチ結果を出力 val dest = scene1.clone().apply { Features2d.drawMatches(scene1rgb, keypoint1, scene2rgb, keypoint2, matches, this) } val result_btm: Bitmap = Bitmap.createBitmap(dest.cols(), dest.rows(), Bitmap.Config.ARGB_8888) .apply { Utils.matToBitmap(dest, this) } // マッチング結果画像の出力 result_img.setImageBitmap(result_btm) // マッチング数を出力 count_txt.text = "マッチング数: ${count}" } catch(e: NullPointerException) { e.printStackTrace() } } } // 画像を選択したときの動き override fun onActivityResult(requestCode: Int, resultCode: Int, resultdata: Intent?) { if((requestCode == RESULT_PICK_IMAGEFILE1 || requestCode == RESULT_PICK_IMAGEFILE2) && resultCode == Activity.RESULT_OK) { val image_view: ImageView = if(requestCode == RESULT_PICK_IMAGEFILE1) src_img1 else src_img2 if(resultdata?.data != null) { try { val uri: Uri = resultdata.data val parcelFileDesc: ParcelFileDescriptor = getContentResolver().openFileDescriptor(uri, "r") val fDesc: FileDescriptor = parcelFileDesc.fileDescriptor val bmp: Bitmap = BitmapFactory.decodeFileDescriptor(fDesc) parcelFileDesc.close() image_view.setImageBitmap(bmp) } catch(e: IOException) { e.printStackTrace() } } } } // BitmapをImageViewから取得する private fun getBitmapFromImageView(view: ImageView): Bitmap { view.getDrawingCache(true) return (view.drawable as BitmapDrawable)?.let { it.bitmap } } companion object { private val RESULT_PICK_IMAGEFILE1: Int = 1001 private val RESULT_PICK_IMAGEFILE2: Int = 1002 } }

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

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

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

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

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

1T2R3M4

2021/05/06 22:49

㏏ って本当にJavaですか。
hoshi-takanori

2021/05/06 23:01

Java じゃなくて Kotlin ですね。変数などの後に : を付けて型を指定することができます。
m.ts10806

2021/05/06 23:03

何も調べようがないとは思えませんが…
2r4h8k3m

2021/05/07 00:50

Android開発の際に出てくるKOTLIN言語のファイルです。どこかで記述をみたような気がしたのですが分からなくなってしまって...
m.ts10806

2021/05/07 00:51

質問は編集できます。
m.ts10806

2021/05/07 00:52

「Kotlin コロン」で検索しても何も出ませんか?
2r4h8k3m

2021/05/07 00:59

hoshi-takanoriさん、いつもありがとうございます。最初にどこかの文献で調べたのは覚えていたのですが、解析中にエラーのeの後に使われていたり引数の後に:Bitmapで設定されたりしていたり根本の定義が分からなくなってしまい...大変助かりました、、
2r4h8k3m

2021/05/07 01:03

この:の書き方がKOTLIN固有の書き方なのか、javaでこういった書き方があるのか、何かAndroid開発特有の書き方なのかがそもそも分かっておらず自分なりに調べたのですが同じ文献に辿り着けなかったので質問させて頂きました。ご指摘どうもです。
m.ts10806

2021/05/07 01:11

質問本文に書かれてないことを他者が知ることはできませんので、「調べたこと」「試したこと」があるのでしたら具体的に記載してください。
guest

回答1

0

ベストアンサー

まず前提として、
JavaとKotlinはそれぞれ別のプログラミング言語であり、
このソースはJavaではなくKotlinで書かれています。

本題の:(コロン)ですが、使い道が複数あるため使う場所によって意味が変わります。
今回質問されているvar bitmap: Bitmapのように変数宣言の後で出てきた場合は、
var 変数の名前: 変数の型のように『続けて後ろに型を記述する』ということを表すために使います。

他の似た使い方としては、
関数の引数の型や戻り値の型を表す際にも使われます。
以下に例を記載します。

Kotlin

1// 引数の数値を2倍して返す関数 2fun double(x: Int): Int { 3 return x * 2 4}

Kotlin

1fun 関数の名前(引数の名前: 引数の型): 戻り値の型 { 2 return 戻り値 3}

この他にもメソッド参照や継承にもコロンが使われることがありますが、
詳しくはKotlinのリファレンスを参照してください。

投稿2021/05/11 12:49

編集2021/05/11 13:06
mazeneko

総合スコア7

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

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

2r4h8k3m

2021/05/12 20:08

ありがとうございます、戻り値と引数表したりしていたのですね...テンプレの例しか覚えていなかったので謎で分からなくなっていました汗 大変助かりました。また今後も機会あればよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問