読者です 読者をやめる 読者になる 読者になる

<!--親の顔より見た光景-->

日々の発見を残していきます。

【Android】マインスイーパのメイン画面を作る

f:id:akagi13213:20170226214406p:plain
こんな画面を作った。

最初は
・GridLayoutとImageButton……マス
・Chronometer……経過時間
・TextView……残り爆弾数
でこの画面を実現する予定だったが、GridLayoutでボタン同士を密接させる事ができなかった。

一般的にゲーム画面を作る際はViewクラスを使うらしいので、そのクラスに画像を乗っけてった。
Viewで画像を表示する - @ANDROID開発

今のところはViewに画像を置いただけで、クリックリスナーは作ってない。
でもゲームの素材を作るのは楽しかった。

タッチした座標を受け取ってマスの画像を変更させる…というのが次の課題。
自分のスマホ解像度(1440 * 2560 xxxhdpi)にしか対応していないが、そこは開き直る。


以下、ソースコードのメモ。
【MainActivity.java

MainActivityはGameViewクラスを呼び出すだけ。

【GameView.java

・12行目…描画に必要なクラス。Paintクラスの中身はBitmapを描画する際は空でいいが、矩形や直線、円などを描画したいときは以下のようにPaintクラスに情報を格納する。

// 円
paint.setColor(Color.YELLOW);    // 線の色
paint.setStrokeWidth(50);    // 線の太さ
paint.setAntiAlias(true);    // アンチエイリアスするかどうか
paint.setStyle(Paint.Style.STROKE);    // 線のみ表示
// (x,y,r,paint) x座標, y座標, r半径
canvas.drawCircle(650, 440, 80, paint);

・13~18行目…描画で使う画像をリソースから指定する。

・20~30行目…描画の際の座標指定。

・42~46…マスの描画。マスを一個置いたらマスのX座標分(144Pixel)横に移動してまたマスを置く。これを縦でも同じように繰り返す。

【AndroidManifest.xml

7行目でステータスバーを消してる。

このアプリの開発から、Eclipseは捨ててAndroidStudioを導入した。
見た目最高、使いやすい
f:id:akagi13213:20170226225001p:plain

【Chrome】知恵袋右下に表示されるランキングを非表示にする

くだらない情報ばかり並べてるYahoo知恵袋の総合Q&Aランキングを消す。(ワイドショー並みにイライラする)

知恵袋右側のランキング等を非表示にする方法 - Yahoo!知恵袋

こちらのリンクはIEでの消し方しか載っていなかったのでChromeでやってみた。

f:id:akagi13213:20170220224054p:plain

 

 

1.Chrome拡張機能Stylish」をインストール。ユーザースタイルシートをいじれるようになる。

chrome.google.com

 

2.インストールしたアイコンをクリック、スタイルを管理するをクリック。新しいスタイルを作成。

f:id:akagi13213:20170220224745p:plain     f:id:akagi13213:20170220224859p:plain

 

3.以下の文をテキストエリアにコピペ。

/* ランキングの非表示 */
.mdCmmn {display: none !important;}

/* PRの非表示 */
.mdAdImg {display: none !important;}

/* バナーの非表示 */
.mdLnkBnnr {display: none !important;}

/*動画付Q&Aの非表示*/
.sideTextList {display: none !important;}
/* 最新の回答の非表示 */
#respondentInfo {display: none !important;}

/*ふわふわモジュールの非表示*/
.mdFwa {display: none !important;}
.overlayWrite {display: none !important;}

/*総合ランキングの非表示*/
#nwrnk {display: none !important;}

/*このカテゴリの回答受付中の質問の非表示*/
.md_listCmmn {display: none !important;}

/*年末年始は動画で楽しもう!の非表示*/
.newYearsHoliday {display: none !important;}
.recommendMovie {display: none !important;}
/*HELP! お願い教えてー!の非表示*/
#rcmd_que {display: none !important;}

/*トップページ質問、動画の非表示*/
#rcqa4ut {display: none !important;}
#qa {display: none !important;}
#nt {display: none !important;}
#rcqa4ut {display: none !important;}
#yvp {display: none !important;}

/*関連広告の非表示*/
#So1 {display: none !important;}
#So2 {display: none !important;}
#vo_main {display: none !important;}

/*ランキングの非表示*/
.at-hd-stat {display: none !important;}

/*回答後のページに表示される質問の非表示*/
#aurge {display: none !important;}

f:id:akagi13213:20170220225411p:plain

 

4.適用先を「次で始まるURL」にして、

  ・http://detail.chiebukuro.yahoo.co.jp

  ・http://chiebukuro.yahoo.co.jp

 この二つを追加。最後にスタイルシートの名前を入力して保存で終了。

 

結構綺麗になりました。

f:id:akagi13213:20170220225759p:plain

【Eclipse】activity_mainは解決できないか、フィールドではありません

ソースコード

f:id:akagi13213:20170219213503p:plain

rを変数に解決できません(´・ω・`) – もぐら王国

上記サイト様で解決。

Android.Rをインポートしてるのが原因らしい。

 

プロジェクト作成のときに「テンプレのActivityで作成」とやったら、これを含めてやたらエラーが出た。

 

何やねんこのIDEAndroid studioに切り替えようかな。

安定した実機デバッグが出来ればNetBeansが最強なのに…

【Eclipse】Java was started but returned exit code=13

Eclipseがタイトルのエラー文を出して起動しなくなった。
Javaのバージョンを1.8にしたのが原因らしい(下記サイト参照)。
Eclipseが起動しない「Java was started but returned exit code=13」 - clock-up-blog

eclipse.exeがあるフォルダのeclipse.iniの先頭行を、

-vm
C:\Program Files (x86)\Java\jdk1.8.0_60\bin\javaw.exe

に変更すると起動した。

【OpenCV】グレースケール動画を作る【Java】

前回、動画の入力と情報の取得が成功したのでグレースケール化をしてみる。
JavaOpenCVのリファレンスに、C++OpenCVで使われるキャプチャ関数名が無かったのでけっこー時間がかかってしまった。)
【VideoApp.java

package videoapp;
import org.opencv.core.Core;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;
import org.opencv.videoio.VideoWriter;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;

public class VideoApp {
    public static void main( String[] args ) {
        System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
        VideoCapture source_video = new VideoCapture( "test.mp4" );     // 動画ファイル読み込み
        if ( source_video == null ) {
            System.out.println( "動画が読み込めません" );
            System.exit( 0 );
        }
        VideoWriter video_writer = new VideoWriter( "test_gray.avi", VideoWriter.fourcc( 'M', 'J', 'P', 'G' ),
                                                     source_video.get( Videoio.CAP_PROP_FPS ), new Size( 512, 384 ) );
        Mat frame_im = new Mat();
        while ( true ) {
            if ( source_video.read( frame_im ) ) {
                Imgproc.cvtColor( frame_im, frame_im, Imgproc.COLOR_RGB2GRAY );
                Imgproc.cvtColor( frame_im, frame_im, Imgproc.COLOR_GRAY2RGB );
                video_writer.write( frame_im );
            }
            else {
                break;
            }
        }
        video_writer.release();
    }
}

実行を終えてから気づいたが、画像処理なので出力された動画の音声情報は失われる。
frame_imはキャプチャした画像を格納するMat型変数。
cvtColorでグレースケールに変換してるが、変換と同時にRGB3チャンネルから1チャンネルになる。1チャンネル画像のままwriteメソッドに突っ込むとエラーを吐くので、冗長な処理だがcvtColorでRGB3チャンネルに直している。

動画処理と言っても基本は画像処理であり、↓のソースコードのwhileループ内で自分のやりたい処理を書くだけである。OpenCVでの画像処理に慣れていれば楽勝(?)だと思う。

while ( true ) {
    if ( source_video.read( frame_im ) ) {
        // ここでグレースケール化や、エッジ化、コントラスト強調、HSV変換による色変換処理など…
        video_writer.write( frame_im );
    }
    else {
        break;
    }
}

【OpenCV】動画の入力と情報の取得【Java】

Java+OpenCVでの動画処理を詳しく解説しているサイトが見つけられなかったので、以下にまとめる。
今回は初歩の初歩である、動画の読み込みとその動画の情報を取得するまで。

ソースコード

package videoapp;
import org.opencv.core.Core;
import org.opencv.videoio.VideoCapture;
import org.opencv.videoio.Videoio;
public class VideoApp {
public static void main( String[] args ) {
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
VideoCapture source_video = new VideoCapture( "test.mp4" ); // ファイル読み込み
double video_width = source_video.get( Videoio.CAP_PROP_FRAME_WIDTH ); // 横幅を取得
double video_height = source_video.get( Videoio.CAP_PROP_FRAME_HEIGHT ); // 縦幅を取得
double video_frame_count = source_video.get( Videoio.CAP_PROP_FRAME_COUNT ); // フレーム数を取得
double video_fps = source_video.get( Videoio.CAP_PROP_FPS ); // フレームレートを取得

System.out.println( "動画の横幅 : " + video_width );
System.out.println( "動画の縦幅 : " + video_height );
System.out.println( "動画のフレーム数 : " + video_frame_count );
System.out.println( "動画のフレームカウント : " + video_fps );
}
}

f:id:akagi13213:20170209231456p:plain

実行結果画面とファイルのプロパティを比較すると、正しく実行できている事がわかる(フレーム数は不明だが)。ちなみにgetメソッドで動画の長さは取得できなさそう。

【LaTeX】箇条書き

箇条書きの方法はWeb検索で一発で出るが、記憶のために書き留めておく。

1.一般的な箇条書きーーーーーー

\begin{itemize}

 \item 山

 \item 川

 \item 海

\end{itemize}

f:id:akagi13213:20170207200045p:plain

 
2.番号箇条書きーーーーーー

\begin{enumerate}

 \item 過去

 \item 現在

 \item 未来

\end{enumerate}

f:id:akagi13213:20170207200214p:plain

 
3.見出し箇条書きーーーーーー

\begin{description}

 \item[麻雀]4人用のボードゲームであり…

 \item[囲碁]2人用のボードゲームであり…

\end{description}

f:id:akagi13213:20170207200235p:plain

 
4.見出し箇条書き(改行)ーーーーーー

\begin{description}

 \item[麻雀]\mbox{}\\

  4人用のボードゲームであり…

 \item[囲碁]\mbox{}\\

  2人用のボードゲームであり…

\end{description}

f:id:akagi13213:20170207200250p:plain

 

5.入れ子箇条書きーーーーーー

\begin{itemize}

 \item 全3部屋

 \begin{enumerate}

  \item 和室

  \item 洋間

  \item 台所

 \end{enumerate}

\end{itemize}

f:id:akagi13213:20170207200318p:plain