【Python/Pillow(PIL)】画像の上下左右反転、90°ごとの回転

Pillowで画像(画像データ)を画像の上下左右反転、90°ごとの回転をさせるには、Imageクラスのtransposeメソッドを用います。

これとは別にImageOpsモジュールmirror関数(左右反転)flip関数(上下反転)があるので、これは後半で説明します。

構文

Image.transpose(method)

パラメータ

引数名 説明
method 上下左右反転、90°ごとの回転の種類を以下の中から指定します。
Image.FLIP_LEFT_RIGHT
Image.FLIP_FLIP_TOP_BOTTOM
Image.FLIP_ROTATE_90
Image.FLIP_ROTATE_180
Image.FLIP_ROTATE_270
Image.FLIP_TRANSPOSE
Image.FLIP_TRANSVERSE
戻り値 上下左右反転、回転した画像(PIL.Image)

サンプル

from PIL import Image

# 画像を開く
img = Image.open("image.jpg")

# 左右上下反転、90度ごとの回転
img_transpose = img.transpose(Image.FLIP_LEFT_RIGHT)

# 画像の保存
img_transpose.save("image_transpose_FLIP_LEFT_RIGHT.jpg")

(実行結果)

元画像 左右反転(Image.FLIP_LEFT_RIGHT)

上下左右、回転の種類

methodに指定する種類は以下の通りです。

Image.FLIP_LEFT_RIGHT Image.FLIP_TOP_BOTTOM
Image.ROTATE_180 Image.ROTATE_90
Image.ROTATE_270 元画像
Image.TRANSPOSE Image.TRANSVERSE

ImageOpsモジュールのmirror(左右反転)とflip(上下反転)

ImageOpsモジュールにも、左右反転(mirror)と上下反転(flip)の関数があります。

こちらの方が関数名的には覚えやすいでしょうか?

 

(サンプル)

from PIL import Image
from PIL import ImageOps

# 画像を開く
img = Image.open("image.jpg")

# 左右反転
img_mirror = ImageOps.mirror(img)
# 画像の保存
img_mirror.save("image_mirror.jpg")

# 上下反転
img_flip = ImageOps.flip(img)
# 画像の保存
img_flip.save("image_flip.jpg")

(実行結果)

ImageOps.mirror() ImageOps.flip()

参考

https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.transpose

https://pillow.readthedocs.io/en/stable/reference/ImageOps.html#PIL.ImageOps.flip

【Python/Pillow(PIL)】画像の回転

【Python/Pillow(PIL)】画像の回転

Pillowで画像(画像データ)を拡大/縮小するには、Imageクラスのrotateメソッドを用います。

構文

Image.rotate(angle, resample=0, expand=0, center=None, translate=None, fillcolor=None)

パラメータ

引数名 説明
angle 回転角度を度数(°)で指定します。
resample 回転時の補間方法を指定します。
Image.NEAREST
Image.BILINEAR
Image.BICUBIC
(参考)画像のリサイズ、補間指定
expand Trueのとき、画像が回転しても画像全体が表示されるよう画像サイズを拡張します。
False(初期値)のとき、画像が回転するしたときにはみ出した部分が切り取られます。
ただし、画像回転の中心は画像の中心で、平行移動が無い事を想定しています。
center 回転の中心座標を(x, y)のタプルで指定します。
初期値:画像の中心
translate 回転後の移動量を(Tx, Ty)のタプルで指定します。
fillcolor 画像の外側の色を指定します。
初期値:黒
戻り値 回転した画像(PIL.Image)

サンプル

from PIL import Image

# 画像を開く
img = Image.open("image.bmp")

# 画像を回転する
img_rotate = img.rotate(30)

# 回転した画像の保存
img_rotate.save("image_rotate.bmp")

(実行結果)

元画像 回転画像

画像がはみ出さないようにする

expand = True に設定することで、画像がはみ出さないよう、画像サイズを自動で拡張し調整します。

(例)

img_rotate = img.rotate(30, expand = True)

(結果)

画像の外側の色の指定

画像の外側の色をfillcolorに指定します。

(例)

img_rotate = img.rotate(30, fillcolor = "Blue")

(結果)

参考

https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.rotate

https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-filters

 

【Python/Pillow(PIL)】画像のリサイズ、補間指定

Pillowで画像(画像データ)を拡大/縮小するには、Imageクラスのresizeメソッドを用います。

構文

Image.resize(size, resample=None, box=None, reducing_gap=None)

パラメータ

引数名 説明
size リサイズ後の大きさを (幅, 高さ)のタプルで指定します。
resample リサイズ時の補間方法を指定します。
Image.NEAREST
Image.BOX
Image.BILINEAR
Image.HAMMING
Image.BICUBIC
Image.LANCZOS
画像の mode が 1, P や I;16などのビット指定モードのときは、Image.NEAREST が初期値
その他の場合、Image.BICUBICが初期値
box 画像を拡大/縮小する領域を(左, 上, 右, 下)の座標のタプルで指定します。
初期値は(0, 0, 画像の幅, 画像の高さ)の画像全体
cropメソッドの処理と同じ
reducing_gap リサイズ時の最適化(詳細わからず。。)
初期値: None (最適化なし)
戻り値 リサイズされた画像(PIL.Image)

サンプル

from PIL import Image

# 画像を開く
img = Image.open("Parrots.bmp")

# 画像を拡大/縮小する
img_resize = img.resize((64, 64))

# 切り抜いた画像の保存
img_resize.save("Parrots_resize.bmp")

(実行結果)

元画像 縮小画像

resample(補間方法)について

resampleの設定は、主に画像を拡大するときに画像の画素と画素の間の輝度値を求める事になるのですが、この時の求め方の方法を指定します。

この画素間の輝度値を求める方法は一般に補間と言いますが、補間については、下記のページを参照ください。

画素の補間(Nearest neighbor,Bilinear,Bicubic)の計算方法

Pillowでは、補間方法にImage.NEAREST, Image.BOX, Image.BILINEAR, Image.HAMMING,  Image.BICUBIC, Image.LANCZOSの方法を指定する事ができますが、

NEAREST→BOX→BILINEAR→HAMMING→BICUBIC→LANCZOS

の順で、キレイにリサイズすることができますが、処理時間は逆に遅くなるため、用途に応じてresampleの設定を行ってください。

個人的には、画像処理後の1画素1画素の輝度値を見せたいときはNEAREST、とりあえずのBILINEARという使い分けが多いです。

下図のように部分的に画像を拡大したときに、resampleの設定を変えると、どのようになるか?見てみたいと思います。

 

NEAREST BOX BILINEAR
HAMMING BICUBIC LANCZOS

拡大の時のキレイさは、NEAREST, BOX → HAMMING → BILEAR → BICUBIC → LANCZOS の順ですかね?

参考

https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize

https://pillow.readthedocs.io/en/stable/handbook/concepts.html#concept-filters

【Python/Pillow(PIL)】画像の一部を切り抜く

Pillowで画像の一部を切り抜くには、Imageクラスのcropメソッドを用います。

書式は

Image.crop(box=None)
引数 説明
box 切り抜く領域を(左, 上, 右, 下)の座標のタプルで指定します。

 

(サンプルプログラム)

from PIL import Image

# 画像を開く
img = Image.open("Parrots.bmp")

# 画像を切り抜く
img_roi = img.crop((146, 81, 253, 183)) # (left, upper, right, lower)

# 切り抜いた画像の保存
img_roi.save("Parrots_roi.bmp")

(実行結果)

元画像 切り抜き画像

(補足)指定座標について

画像を切り抜く座標の定義ですが、画像の幅がWidth、画像の高さがHeightとすると、
画像の左上が(0, 0)、画像の右下が(Width-1, Height-1)となります。

実際に切り抜かれる画像の領域は、左上の座標(left, upper) を含み、右下の座標(right, lower) の1画素内側の領域が切り抜かれます。

参考

https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.crop

【OpenCV/Python】imreadで画像ファイルが読み込めないときの対応

opencv-pythonのimreadで画像を開き、以下のようなフィルタ処理を行うプログラムを実行すると、エラーが表示される場合があります。

import cv2

# OpenCVで画像ファイルを開く
img = cv2.imread("Mandrill.bmp", cv2.IMREAD_UNCHANGED)

# ガウシアンフィルタ
dst = cv2.GaussianBlur(img, (3, 3), 0)

cv2.imshow("Image", dst)
cv2.waitKey(0)

エラー内容

OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\smooth.dispatch.cpp:617: error: (-215:Assertion failed) !_src.empty() in function ‘cv::GaussianBlur’

 

OpenCVの場合、エラー内容の最後の方を見ると、だいたいエラーの原因がわかる場合が多いのですが、今回のエラーの内容の場合

  !_src.empty() in function ‘cv::GaussianBlur’

の部分が大事です。

直訳的に言うと、

  ’cv::GaussianBlur’関数の入力画像(src)は空(empty)ではいけません。

と言われています。

入力画像が空になる原因は imread()関数で画像ファイルが読み込めない場合がほとんどなのですが、読み込めない原因は、主に以下の2つです。

 

●画像ファイルがみつからない。(カレントディレクトリに画像ファイルが無い)

●ファイル名、ディレクトリ名に日本語が含まれている

 

画像ファイルがみつからない場合

imread()関数で、ファイル名の部分に相対パスでファイル名を指定すると、カレントディレクトリにあるファイルを探しに行くため、画像ファイルがカレントディレクトリに無いと、画像ファイルを開く事ができません。

【対策】

①ファイル名を相対パスではなく、絶対パス(フルパス)で指定する。

(例)

img = cv2.imread(r"C:\temp\Mandrill.bmp", cv2.IMREAD_UNCHANGED)

 

②カレントディレクトリを確認し、カレントディレクトリにファイルを置く。

カレントディレクトリは以下のようにすると、確認ができます。

import os

# カレントディレクトリの表示
print(os.getcwd())

ファイル名、ディレクトリ名に日本語が含まれている場合

OpenCVでは日本語を扱う事ができません。

そのため、画像ファイル名においても日本語が含まれるとimread関数で画像ファイルの読み込みに失敗します。

日本語ファイル名の画像を開くには、OpenCVではなく、PillowやNumPyを使って画像ファイルを開き、OpenCVの画像形式である ndarray へ変換する事ができます。

Pillowで画像ファイルを開いた方が、さまざまな画像ファイルフォーマットに対応しているので、汎用性が高いと思います。

(参考)

【OpenCV/Python】日本語の画像ファイル読込・保存

Snap、Grabとは?リングバッファとは?

工業用のカメラを用いた画像の撮影方法に SnapGrab という言葉があります。

簡単に言ってしまえば、Snap静止画撮影で、Grab動画撮影となります。

SnapとGrabの厳密な定義は、各種画像入力ボードのメーカーやカメラメーカーにより異なってくるかとは思いますが、簡単に説明したいと思います。

Snap

Snapでは画像の取込を開始してから、実際に画像の撮影(画像データのメモリの転送)を行い、画像の取込を停止します。

この一連の処理をSnapと言います。

ただし、Snapでもスマホのように連射をすることはできますが、画像取込と画像取込の間に画像の取込開始/停止の処理が入っているため最速のフレームレートを出せない事に注意してください。

Snapでのメリットは、次の画像取込を行うまで、撮影した画像データが上書きされる事がないので、プログラム的に簡単になります。

Grab

Snapでは画像の取込開始/停止を繰り返していましたが、Grabでは画像の取込を開始し、次に画像の取込を停止するまで画像の取込を繰り返し行います。

画像取込と画像取込の間に余計な処理が入らないため、動画のように連続的に画像を取り込む場合は、Grabで撮影を行います。

Grabの場合、動画の撮影中に撮影した画像データに対して画像処理などを行う事が多いのですが、この処理はSnapと比べて、より複雑です。

実際の画像取込は、カメラのセンサが露光時間分露光し、撮影された画像データがPCのメモリへ配置されるまでの処理となります。

そのため、撮影された画像データへアクセスするには、画像データがメモリへの配置が完了するのを待ってから、画像データをコピーするなり、直接画像処理をする必要があります。

さらには、ある程度の時間、Grabで撮影する場合、すべての画像データをメモリ格納しておく事は、メモリ容量的に無理な場合が多いので、一般的にはリングバッファ(循環バッファ)と呼ばれるメモリ形式で画像データを上書きしながらメモリに格納します。

リングバッファ

リングバッファとは、有限数のメモリ領域を上書きしながら、メモリへデータを格納する方法です。

画像データの場合は、例えば

1枚目の画像データを画像メモリ[0]へ格納
2枚目の画像データを画像メモリ[1]へ格納
3枚目の画像データを画像メモリ[2]へ格納
4枚目の画像データを画像メモリ[3]へ格納
5枚目の画像データを画像メモリ[0]へ格納 ← これ以降、メモリの上書きが発生している
6枚目の画像データを画像メモリ[1]へ格納
        :

のようにメモリを上書きしながら画像データを格納していきます。

このリングバッファで良い事は、画像を撮影しながら画像処理などを行った場合、1枚1枚の画像処理時間は、通常、バラついてしまうため、画像処理時間が、画像が格納されてから、次の画像が格納されるまでの時間を時々超えてしまう場合でも、リングバッファの面数(上図の例では4面)が多いと画像処理中に、次の画像データに上書きされにくくなります。

まとめ

画像の撮影方法にはSnapとGrabという撮影方法があります。

それぞれの特徴は以下の通りです。

長所 短所
Snap プログラムが簡単 高速フレームレートで撮影できない
Grab 高速フレームレートで撮影できる プログラムが複雑になる

 

【Windows11】マウスポインタ、ダブルクリックなどの設定

Windows11より前のWindowsではマウスの設定に関しては、コントロールパネルよりマウスの設定を行いましたが、Windows11でも同様の設定が出来ますが、別途、Windows11の設定から行うマウスの設定が追加されています。

 

Windows11での設定は、スタートボタンを右クリックし、設定をクリックします。

左側のBluetoothとデバイスを選択し、右側のマウスをクリックします。

すると、マウスの設定画面が開きます。

マウスの主ボタン

従来の主と副のボタンを切り替えると同じ機能ですが、通常のクリック(右クリックではなく)のボタンを設定します。通常はです。

マウスポインターの速度

マウスポインタの移動速度を設定します。

マウスホイールを回転させてスクロールする

マウスホイールを回転させたとき、複数行ずつ もしくは 1画面ずつ から選択します。

一度にスクロールする行数

マウスホイールを回転させたときにスクロールする行数を指定します。

ホバーしたときに非アクティブウィンドウをスクロールする

非アクティブウィンドウ(選択されていないウィンドウ)上で、マウスホイールを回転させたときに画面をスクロールするか?を設定します。

マウスの追加設定

従来のマウスの設定と同様に、マウスポインタの種類やダブルクリックの速度などを設定します。

上記のWindows11の設定と被る設定も多いのですが、最後に変更した設定が有効になります。

マウスポインター

マウスポインターのサイズを色を設定します。

マウスポインタのサイズが設定できますが、スクリーンキャプチャしたときのポインタの大きさは、キャプチャソフトによっては繁栄されない場合があります。

【Windows11】電源プラン(スリープ/シャットダウンの時間)の設定

Windowsでは、昔から一定時間で、モニタの電源を切ったり、スリープにしたり、シャットダウンしたりと出来ますが、Windows11においても同様の設定が出来ますが、Windows11からの設定方法と従来と同様の設定方法が混在している状況です。

Windows11での電源プランの設定では、設定出来る項目が少ないため、従来の方法も併せて設定する必要がありそうです。

Windows11からの電源オプション設定

スタートボタンを右クリックし、電源オプションをクリックします。

すると、画面とスリープ電源モードの設定ができます。

画面とスリープでは

●電源接続時に、次の時間が経過した後に画面の電源を切る

●電源接続時に、次の時間が経過した後にデバイスをスリープ状態にする

の状態にするまでの時間が設定できます。

電源モードでは、トップクラスの電力効率、バランス、最適なパフォーマンス の設定ができます。

 

従来の電源オプション設定

従来と同様の電源オプション設定はコントロールパネルから設定を行います。

コントロールパネルの表示はWindows11では少々わかりづらくなっているので、こちらを参照ください。

【Windows11】コントロールパネルの表示

コントロールパネルの表示は右上の表示方法の設定で変わってきますが、ここでは表示方法をカテゴリに設定した場合で説明します。

ハードウェアとサウンドをクリックします。

次に電源オプションをクリックします。

すると電源プランの バランス と 省電力 の切り替えができます。

さらに上の画面のプラン設定の変更をクリックすると、さらなる詳細の電源の設定ができます。

電源オプションをクリック後、最初に表示された画面の電源ボタンの動作を選択するをクリックすると

電源プランの作成をクリックすると

ディスプレイの電源を切る時間の指定コンピューターがスリープ状態になる時間を変更は、どちらも同じ画面ですが、以下の画面となります。

【Windows11】出力するスピーカー/ヘッドホンの切り替え

私のPCの場合、音を出力するサウンドのデバイス(スピーカー)はモニタ、USBスピーカー、有線ヘッドホン、Bluetoothヘッドホンとあるのですが、有線のヘッドホンだけは接続しても自動で出力を切り替えてくれなく、手動で出力を変更する必要がありました。

そのスピーカー/ヘッドホンの出力を切り替える方法は以下のように行います。

 

タスクバー右側のスピーカーのアイコンをクリックします。

表示されたウィンドウのボリューム調整のスライダの右側にある > マークをクリックします。

すると、接続されているスピーカー/ヘッドホンの一覧が表示されるので、出力したいデバイスをこの中から選んでクリックすると、音の出力先が変更されます。

他にもタスクバーのスピーカーのアイコンを右クリックしサウンドの設定をクリックすると、より詳細な設定が可能です。

この画面では、出力するスピーカーの切り替えの他にも、入力(マイク)の設定や、スピーカーの左右のバランス変更などが行えます。

左右のバランスを変更するには、スピーカーやヘッドホンの表示の右側に表示されている> の部分をクリックします。

この時表示されたウィンドウの左チャンネル右チャンネルの部分のスライダを調整することで、ステレオの左右バランスを調整します。

【Windows11】OneDriveのフォルダ移動

最近のPCはCドライブがSSDで主にプログラムインストール用。DドライブはHDDでファイル保存用と別れている場合が多いと思いますが、OneDriveはCドライブに作成されているので、これをDドライブへ移動させたい!

という事で、OneDriveフォルダの移動方法です。

基本的に以下の手順で行います。

OneDriveのリンク解除

フォルダの移動

OneDriveフォルダの指定

OneDriveのリンク解除

タスクバー右側の雲マークを右クリックします。

表示されたメニューの設定をクリックします。

表示されたウィンドウのアカウントタブのこのPCのリンク解除をクリックします。

表示されたウィンドウのアカウントのリンク解除をクリックします。

リンクが解除されるまで時間がかかるので、しばらく待ちます。

実際にリンクが解除されると、下のように表示されますが、一旦、ウィンドウを閉じずに放置して、次のOneDriveのフォルダを移動します。

OneDriveフォルダの移動

OneDriveのフォルダはデフォルトで、

   C:\Users\[ユーザー名]\OneDrive

にあるので、OneDriveのフォルダごと、希望の場所へ移動します。

私の場合、以下の場所へ移動しました。

    D:\Cloud\OneDrive

OneDriveフォルダの指定

OneDriveのフォルダを移動後、先ほど放置していたウィンドウからOneDriveの設定を行います。

メールアドレスの部分に自分のMicrosoft365アカウントのメールアドレスを入力し、サインインをクリックします。

次にパスワードを入力し、サインインをクリックします。

すると、元々設定されていたOneDriveのフォルダが左下に表示されているので、場所の変更をクリックします。

次に、今回移動したフォルダの場所(OneDriveのフォルダ)を指定し、フォルダーの選択をクリックします。

OneDriveフォルダは既にこのコンピューターに存在します

と表示されますが、今回は、フォルダを移動したいので、このフォルダーを使用をクリックします。

これで、設定そのものは完了です。

あとは、画面に従って次へ進めていけはOKです。

【Windows11】回復ドライブ(リカバリーディスク)の作成

以前はパソコンを購入すると、リカバリーディスクが添付されていましたが、最近では、添付されていない事も多いかと思います。

そこで、PCを購入したら、いざという時のために、まずは回復ドライブの作成をお勧めします。

以下はWindows11の時の回復ドライブの作成方法を紹介します。
回復ドライブの作成には、1時間程度かかるので、時間に余裕のある時に行ってください。

USBメモリの準備

まず、回復ドライブの作成には、16GB以上のUSBメモリが必要になるので準備します。
回復ドライブ作成時にUSBメモリがフォーマットされるので、注意してください。

私は、この↓USBメモリを購入しました。

 

ちなみに、このUSBを選んだのは、余白に文字を書けたので。

回復ドライブの作成

準備したUSBメモリは、USBポートに刺しておきます。

スタートボタンをクリックし、右上のすべてのアプリをクリックします。

次にWindowsツールをクリックします。

Windowツール画面右側の下の方に回復ドライブのアイコンがあるので、これをダブルクリックします。

すると

このアプリがデバイスに変更を加えることを許可しますか?

と表示されるので、はいをクリックします。

次に、システムファイルを回復ドライブにバックアップしますのチェックが入ったまま、次へをクリックすると、お待ちくださいのウィンドウが表示されますが、1分少々待ちます

すると刺したUSBメモリが表示されるので、このドライブが正しいか?確認します。
USBメモリはフォーマットされるので、注意してください。
表示されているドライブが正しければ次へをクリックします。

USBメモリがフォーマットされるため、確認画面が表示されますが、問題なければ作成をクリックします。

ここから、回復ドライブの作成に1時間程度かかるので、ひたすら待ちます。

作成が完了すると、下のようなウィンドウが表示されるので、完了をクリックし、これで終了です。

最終的に作成されたUSBメモリのプロパティを確認すると、8.22GB使用していました。

確かに16GBのメモリがあれば十分なようですが、回復ドライブは、年に1回、作成する事が推奨とのことで、サイズも増えそうだし、32GBのメモリを買いましたが、まぁ、いっか。。

【Windows11】初期インストール済みアプリ一覧

最近、WindowsPCを新規購入しました!

何もインストールをしていない真っさらな状態は、あまり無いので、Windows10からWindows11へアップデートしたとき、インストールされているアプリの一覧をまとめました。

PCの環境によっても異なると思いますので、個人的メモです。。

 

アプリの一覧は、スタートボタンの右ボタン→アプリ→アプリと機能より確認しました。

  • 3Dビューア
  • AV1 Video Extension
  • Cortana
  • Disney+
  • Groove ミュージック
  • Intel(R) Optane(TM) Memory and Storage
  • Microsoft Edge
  • Microsoft Edge WebView2 Runtime
  • Microsoft OneDrive
  • Microsoft Solitaire Collection
  • Microsoft Store
  • Microsoft Teams
  • Microsoft To Do
  • Microsoft Visual C++ 2015-2019 Redistributable(x64) – 14.22.27821
  • Microsoft Visual C++ 2015-2019 Redistributable(x86) – 14.22.27821
  • Microsoft Whiteboard
  • Microsoft ニュース
  • Microsoft フォト
  • Mixed Reality ポータル
  • MPEG-2 ビデオ拡張機能
  • Norton Security
  • NVIDIA FrameView SDK 1.1.4923.29968894
  • NVIDIA GeForce Exprience 3.23.0.74
  • NVIDIA HD オーディオ ドライバー 1.3.38.60
  • NVIDIA PhysX システム ソフトウェア 9.19.0218
  • NVIDIA グラフィックスドライバー 471.41
  • Office
  • OneNote
  • People
  • Power Automate
  • PowerDVD for THIRDWAVE
  • Realtek Audio Console
  • Realtek Audio Driver
  • Skype
  • Snipping Tool
  • Spotify
  • Stream
  • Windows Terminal
  • Windows セキュリティー
  • Xbox
  • Xbox Game Bar
  • Xbox Live
  • アラーム&クロック
  • インテル(R) マネジメント・エンジン・コンポーネント
  • カメラ
  • ゲームサービス
  • スマホ同期アプリ
  • ヒント
  • フィードバック Hub
  • ペイント
  • ペイント 3D
  • ボイスレコーダー
  • マップ
  • メール/カレンダー
  • メッセージング
  • メモ帳
  • 映画&テレビ
  • 天気
  • 電卓
  • 日本語 ローカル エクスペリエンス パック
  • 付箋
  • 問い合わせ

個人的に気になったのは、C++ Redistributableが 2015-2019 は入っている部分。

逆に言うと、それ以外はインストールしないといけない。

【Windows11】動作可能な.NET Frameworkのバージョン

何もインストールしていないWindows11のPCで.NET Frameworkで作成したプログラムは動作するのか?を調べてみました。

※実際にはWindows10から何もインストールせずにWindows11へアップデートしたPC環境で評価しました。

 

結論からすると、exeが.NET Framework4以降であれば、Windows11で動作します。
.NET Framework4未満であれば、別途、.NET Frameworkをインストールする必要があります。

.NET Framewok4以上のexeから参照している.NET FrameworkのDLLが、.NET Framework4未満でも動作します。

評価方法

Visual StudioでC#のWindows Formsのプログラムを作成し、対象のフレームワークを変えながらビルドし、Windows11のPCで動作確認を行いました。

結果

評価.NET Frameworバージョン 結果
2.0 ×
3.0 ×
3.5 ×
4
4.5
4.5.1
4.5.2
4.6
4.6.1
4.7.2
4.8

 

.NET Framework4未満のプログラムを実行すると、下のウィンドウが表示されるので、

この機能をダウンロードしてインストールする

をクリックし、.NET Frameworkをインストールしてください。