工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

python3とpycharmとpygameで画像表示してみた 第2回

pycharm(IDE)+python3(言語)+pygame(ライブラリ)で画像表示 第2回

プロジェクトを作成

画像表示の練習用のプロジェクトを作成

とは言いながら、ぶっちゃけ前回の使いまわし or  前回のプロジェクトにスクリプト*1を追加でいい思います。
少なくとも、スクリプトは前回のものに追加していきます。
(ここでは、プロジェクト名:mygame02、スクリプト名:mygame02.pyとしました*2

画像を用意

自分で用意、またはWebから、利用可能な画像を用意します。
pygameの公式ガイドによると、利用可能な画像形式は(日本語訳はちょい適当です)。。。


pygame.image.loadコマンドで読み込み可能な画像形式は、基本的に非圧縮BMP形式のみ。
ほかの画像形式をサポートしているバージョン(なんだそれ?)のみ、以下の形式が読み込み可能

  • JPG
  • PNG
  • GIF (アニメーションはダメ)
  • BMP
  • PCX
  • TGA (非圧縮形式のみ)
  • TIF
  • LBM (PBM)
  • PBM(PPM, PGM)
  • XPM

画像の保存は、以下の形式のみに対応しています。

んーと、先日インストールしたばかりなので、きっとBMP以外の画像形式でも読めるでしょうという見切り発車の元、PNG形式の画像を用意してみました。

図:今回使った画像(ファイル名:char1.png

*今回使った画像情報*

画像名 char1.png
画像形式 PNG
サイズ 369x480

これをスクリプトがあるフォルダに移動します。

f:id:gomta777:20191007173410p:plain
図:画像の配置
これでやっとこ準備完了かなぁ。

画像の読み込み表示するスクリプトの記述

やっとこスクリプトを記述していきます。

前回からの変更点はコメントで書いておきました。

いよいよ実行

メニュー → RUN → RUN で実行します。

図:実行画面

こんな感じになりました。PNGの透過部分もちゃんと透過されて描画してくれてますね。
スプライトの処理を自分で書かなくてもよさそう。

所感

前回のところまで、できていれば割と簡単に画像の表示はできるみたいな気がした。
折角なんで、今回使ったクラス?モジュール?のちょっとした開設を付け加えておこうかと思います。

モジュール名 機能 備考
pygame.image.load 指定したファイル名の画像を読み込む 読み込んだ画像から新しいSurfaceを生成
pygame.image.save 指定したSurfaceを画像として保存します 指定なしはTGA形式の画像に保存*3
pygame.image.get_extend 規定以外のファイルが使えるか確認 結果はbooleanで返ってくる
pygame.image.tostring 画像を文字形式に変換する 今は省略
pygame.image.fromstring 画像を表す文字形式のデータからSurfaceを生成 今は省略
pygame.image.frombuffer 文字列形式の画像情報から直接Surfaceを生成 今は省略

読み込まれた画像はSurfaceに変換されます。Surfacepygameで画像の情報をメモリ内で保存する形式だと思えばいいのかと。
様々なフォーマットを読み込んでも、pygame内ではSurfaceって共通形式で扱える!かな。
詳しいことは後でやる気あったら書こうかのぉ。

また、画面に画像を張り付けるコマンド

screen.blit(image, (0, 0))

imageは画像から生成したSurfaceです。後ろの引数は、表示位置*4で、画像の原点をスクリーンのどこへ張り付けるか、っていう指定。
つぎは、画像を動かしてみようかな。
へば、また!

*1:なんか、いろいろWeb回った結果スクリプトって呼んでる人が多いからこっちで呼ぼうかの

*2:前回と微妙に整合性合わなぐなったじゃ

*3:読み込みはBMP規定なのになんでじゃい!

*4:画像も、スクリーンも原点は左上