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

Pygameで読み込んだ画像をプログラム上で拡大・縮小する方法を紹介。pygame.transform.smoothscaleを使い、倍率から変換後の幅と高さを計算して表示します。

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

画像を拡大縮小してみる

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

画像を拡大縮小してみる

使うもの

  • 前回のプロジェクト
  • 前回のスクリプト
  • 前回の画像

前回までで、画像を表示できたのですが、画像を張り付けるときに拡大縮小をしてみます。
画像自体のサイズを変えてもいいのですが、今回は読み込んだ画像をプログラムの中で拡大縮小してみました。

使うモジュール

pygame.transformモジュール

を使います。
pygame.taransformモジュールには、いくつか拡大縮小ができるメソッドがあります。

モジュール 機能 備考
pygame.taransform.scale 指定Surfaceの拡大縮小を行う 速さ重視で拡大縮小
pygame.transform.smoothscale 指定Surfaceの拡大縮小を行う 見た目重視で拡大縮小*1

それぞれ引数は、(surface, (width, height)) で、変換後のsurfaceを返すメソッドになっています。

スクリプトを変更

今回は、pygame.transform.smoothscaleメソッドを使って拡大縮小してみます。
こっちのメソッドにした意味は。。。特にないです。なんとなく。

Gistのソースコードを直接開く

mainの中をこう変更します。
やっていることは、

  1. imagerectに元画像の幅と高さを記録
  2. ratioに拡大縮小率を決定
  3. ratioとimagerect.widthを使って変換後の画像幅を計算
  4. ratioとimagerect.heightを使って変換後の画像高を計算
  5. 元画像(image)を(imagerect.width, imagerect.height)の大きさに変換

となっています。

実行例(ratio=0.2)

f:id:gomta777:20191008004321p:image:w200

図:ratio=0.2の時の実行例

ちゃんと縮んでますね!

実行例(ratio=2.0)

f:id:gomta777:20191008004321p:image:w200

図:ratio=2.0の時の実行例

こちらもちゃんと拡大されています!

所感

拡大縮小も簡単にできました。
実は、紹介したメソッドのほかにも、拡大縮小できるメソッドが幾つかあります。

メソッド 戻り値 機能
pygame.transform.rotozoom(Surface, angle, scale) surface 拡大縮小回転を同時に行う
pygame.transform.scale2x(Surface) surface 画像を2倍に拡大

pygame.transform.smoothscaleのところを変更するだけなので試してみると面白いと思います。

f:id:gomta777:20191008012537p:image:w200

図:pygame.transform.rotozoom(image, -45.0, 0.5)の例

こんけできれば、いろんたごだやれそんたなっす!*2
へだば、まだ。*3

12歳からはじめる ゼロからの Pythonゲームプログラミング教室

*1:拡大縮小に適用されるフィルタも指定できますが、ここでは割愛します

*2:このぐらいできれば、いろんなことができそうですね

*3:それじゃ、また!

Read more

どうしてWindowsはCドライブから始まるの? AとBはどこへ行った?

どうしてWindowsはCドライブから始まるの? AとBはどこへ行った?

どうしてWindowsはCドライブから始まるの? AとBはどこへ行った? Windowsを使っていると、システムが入っているドライブってだいたい C: ですよね。 でも、よく考えると変じゃないですか? アルファベットなら普通はAから始まりそうなのに、なんでいきなりCなの? じゃあ、 A: B: はどこに行ったんだよ、って話です。 これ、別にCに何か特別な意味があるわけじゃありません。 昔、AとBを先に使っちゃったから、その次がCになった。 だいたいそれだけの話です。 そもそも「Cドライブ」ってWindows系の文化 まず、C: とか D: とかいう呼び方は、今だとWindowsでおなじみのものです。 LinuxやmacOSでは、基本的にこんな呼び方はしません。 Linuxなんかだと、 / ├─ home ├─ usr ├─ var └─ ... みたいに / を一番上にして、ディスクもそのディレクトリ構造の中にくっつけて使います。 じゃあWindowsの C: D: E: はどこから来たのか。 Windowsより前の MS-DOS です。 ……

DirectXTK講座 第2回:Direct3D 11のテンプレート導入からウィンドウを表示まで

DirectXTK講座 第2回:Direct3D 11のテンプレート導入からウィンドウを表示まで

DirectXTK講座 第2回:Direct3D 11のテンプレートを導入してウィンドウを表示しよう 今回は、DirectXTKを使ったプログラムを作る土台として、Direct3D 11のプロジェクトテンプレートをVisual Studioに導入し、実際にウィンドウが表示されるところまで確認してみよう! 使用するのは、Chuck Walbourn氏が公開している directx-vs-templates を使います。個人のリポジトリですが、MS公式からもリンクされており、ほぼ公式です。テンプレートを使うことで、あらかじめWindow1枚ぐらいペロッと出すところまでを作ってくれます。 そのために、テンプレートを自分の開発環境にインストールする必要があります。VS(VisualStudio)までは前回まででインストールできていると思うので、それにテンプレートを追加するって感じ。 1.Direct3D用テンプレートを入手する まず、ブラウザ(なんでもいいよ)で次のGitHubリポジトリを開きます。 directx-vs-templates - GitHub リポジトリを開いたら