【Python】文字列の大文字、小文字変換

文字列を大文字に変換するには upper()メソッド
文字列を小文字に変換するには lower()メソッドを用います。

このupper()、lower()を使ったサンプルは以下の通りです。

# 元の文字列
str = 'Imaging Solution'
print(str)

# ----------------
# 大文字に変換
temp = str.upper()
print(temp)
# IMAGING SOLUTION

# ----------------
# 小文字に変換
temp = str.lower()
print(temp)
# imaging solution

実行結果

【Python】画像データがNumPyかPillowか調べる方法

Pythonで画像処理をしていると、画像データの型(クラス)は、OpenCVを使っているとNumPyだし、Tkinterで画像を表示しようとすると、Pillowを使ったりもするので、どうしても画像データがNumPyとPillowが混在しがちです。

そこで、画像データがNumPyなのか?Pillowなのか?を調べる方法の紹介です。

画像データに限らず、インスタンスしたクラスのオブジェクトが、どのクラスなのかを調べるにはisinstance関数を用います。

ininstance関数の書式は以下の通りです。

ininstance(クラスオブジェクト, クラス)

クラスオブジェクトが指定したクラスと一致している場合はTrueが、異なる場合はFalseが返ります。

このininstance関数を使って、画像データがNumPyなのか?Pillowなのか?を調べる関数の例を以下に示します。

def check_image_data(image):
    '''画像データがNumPyか、Pillowかを調べる'''
    if isinstance(image, np.ndarray):
        print("NumPy Image")
    elif isinstance(image, Image.Image):
        print("Pillow Image")

この関数を使って、実際に画像データがNumPyかPillowかを調べるサンプルは以下の通りです。

from PIL import Image
import numpy as np

def check_image_data(image):
    '''画像データがNumPyか、Pillowかを調べる'''
    if isinstance(image, np.ndarray):
        print("NumPy Image")
    elif isinstance(image, Image.Image):
        print("Pillow Image")

# Pillowの画像データ
pillow_image = Image.open("Mandrill.bmp")
check_image_data(pillow_image)

# NumPyの画像データ
numpy_image = np.asarray(pillow_image)
check_image_data(numpy_image)

実行結果

 

型を調べるだけならtype関数を使うこともできます。

(例)

print(type(numpy_image))
# <class 'numpy.ndarray'>
print(type(pillow_image))
# <class 'PIL.BmpImagePlugin.BmpImageFile'>

上記のコメント部分がtype関数を使って型を表示した結果になりますが、NumPyの型は‘numpy.ndarray’と表示されているので、まだ分かり易いのですが、Pillowの型は、’PIL.Image.Image’と表示されるのを期待しているのですが、‘PIL.BmpImagePlugin.BmpImageFile’と表示されてしまいます。

これは、bmpファイルからPillowの画像データを開いたためで、別のjpegファイルから開くと別の型が表示されます。

そのため、型を調べる、表示するだけなら type関数、型を判断するならisinstance関数という使い分けが良さそうです。

関連記事

【Python】画像データ(NumPy,Pillow(PIL))の相互変換

【Python/tkinter】OpenCVのカメラ動画をCanvasに表示する

USBカメラなどで取得した画像(動画)をOpenCVの cv2.imshow() で表示するには比較的簡単に表示する事ができますが、tkinterを使ってWindow付でCanvasに表示したい場合には、少しコツが必要になります。

そこで、tkinterのCanvasに動画を表示する方法を紹介します。

OpenCVでUSBカメラの動画を表示

USBカメラの動画をOpenCVのの cv2.imshow() で表示するプログラムは、以下のようにすれば表示されます。

import cv2

# カメラをオープンする
capture = cv2.VideoCapture(0)

# カメラがオープン出来たか?
camera_opened = capture.isOpened()

while camera_opened:

    # フレーム画像の取得
    ret, frame = capture.read()
    
    # 画像の表示
    cv2.imshow("Image", frame)

    if cv2.waitKey(1) != -1:
        # キー入力で終了
        break

capture.release()
cv2.destroyAllWindows()

tkinterのCanvasに動画を表示

tkinterのCanvasに動画を表示する場合は、OpenCVの動画表示プログラムの cv2.imshow() の部分を書き換えて表示しようとしても動画が表示されません。

これは、while文中でCanvasへ画像を表示しようとすると、画像の更新スレッドがブロックされた状態となってしまい、画像を更新するには、少しの時間、スレッドを空ける必要があります。

このスレッドを空ける処理には after() 関数を使います。

after() 関数では、指定した時間を待ってから、指定した関数を実行することができます。

処理の意味合い的には sleep() 関数とも似ていますが、sleep() 関数では、指定時間分、スレッドをブロックしてしまいますが、 after() 関数ではスレッドがブロックされません。

それらを考慮し、tkinterのCanvas上にUSBカメラの動画を表示したプログラムが以下になります。

 

以下のサンプルプログラムでは、Camvas上をマウスの左ボタンをクリックすると、画像の取得が開始/停止するようになっています。

import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageTk, ImageOps  # 画像データ用

import cv2

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)
        self.pack()

        self.master.title("OpenCVの動画表示")       # ウィンドウタイトル
        self.master.geometry("400x300")     # ウィンドウサイズ(幅x高さ)
        
        # Canvasの作成
        self.canvas = tk.Canvas(self.master)
        # Canvasにマウスイベント(左ボタンクリック)の追加
        self.canvas.bind('<Button-1>', self.canvas_click)
        # Canvasを配置
        self.canvas.pack(expand = True, fill = tk.BOTH)

        # カメラをオープンする
        self.capture = cv2.VideoCapture(0)

        self.disp_id = None

    def canvas_click(self, event):
        '''Canvasのマウスクリックイベント'''

        if self.disp_id is None:
            # 動画を表示
            self.disp_image()
        else:
            # 動画を停止
            self.after_cancel(self.disp_id)
            self.disp_id = None

    def disp_image(self):
        '''画像をCanvasに表示する'''

        # フレーム画像の取得
        ret, frame = self.capture.read()
    
        # BGR→RGB変換
        cv_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        # NumPyのndarrayからPillowのImageへ変換
        pil_image = Image.fromarray(cv_image)

        # キャンバスのサイズを取得
        canvas_width = self.canvas.winfo_width()
        canvas_height = self.canvas.winfo_height()

        # 画像のアスペクト比(縦横比)を崩さずに指定したサイズ(キャンバスのサイズ)全体に画像をリサイズする
        pil_image = ImageOps.pad(pil_image, (canvas_width, canvas_height))

        # PIL.ImageからPhotoImageへ変換する
        self.photo_image = ImageTk.PhotoImage(image=pil_image)

        # 画像の描画
        self.canvas.delete("all")
        self.canvas.create_image(
                canvas_width / 2,       # 画像表示位置(Canvasの中心)
                canvas_height / 2,                   
                image=self.photo_image  # 表示画像データ
                )

        # disp_image()を10msec後に実行する
        self.disp_id = self.after(10, self.disp_image)

if __name__ == "__main__":
    root = tk.Tk()
    app = Application(master = root)
    app.mainloop()

実行結果

ポイント

  • 動画を表示するときは、while文ではなく、after()関数で繰り返し処理を行う。
  • OpenCVの画像は、カラー画像の場合、BGRのデータの並びをRGBへ並び替えてからOpenCVの画像データ(NumPyのndarray)をPillowのImageへImage.fromarray()関数で変換する。

関連記事

【OpenCV-Python】Tkinter GUI Sample

【Python/tkinter】Canvasに画像を表示する

【Python】画像データ(NumPy,Pillow(PIL))の相互変換

【Python/NumPy】カラー画像データをRGBからBGRへ変換

【Python/tkinter】新しいウィンドウを開く(モーダル、モードレスダイアログ)

新しくウィンドウを開く場合、モーダルダイアログモードレスダイアログというものがあります。

モーダルダイアログとは、新しいウィンドウを開いたとき、新しいウィンドウのクリックやテキスト入力などの操作ができるが、元のウィンドウの操作ができない表示方法で、モードレスダイアログとは、新しいウィンドウと元のウィンドウの両方とも操作できる表示方法となります。

PythonのtkinterではToplevel()メソッドを実行すると新しいウィンドウを作成することができますが、デフォルトではモードレスダイアログとして開きます。

モーダルダイアログにするには、Toplevelで作成したウィンドウに対して、grab_set()メソッドを実行することで、モーダルダイアログになります。

 

サンプル実行結果

サンプルプログラム

import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master = None):
        super().__init__(master)

        self.master.title("Main")       # ウィンドウタイトル
        self.master.geometry("300x200") # ウィンドウサイズ(幅x高さ)

        # ボタンの作成
        btn_modeless = tk.Button(
            self.master, 
            text = "Modeless dialog",   # ボタンの表示名
            command = self.create_modeless_dialog    # クリックされたときに呼ばれるメソッド
            )
        btn_modeless.pack()

        btn_modal = tk.Button(
            self.master, 
            text = "Modal dialog",      # ボタンの表示名
            command = self.create_modal_dialog    # クリックされたときに呼ばれるメソッド
            )
        btn_modal.pack()

    def create_modeless_dialog(self):
        '''モードレスダイアログボックスの作成'''
        dlg_modeless = tk.Toplevel(self)
        dlg_modeless.title("Modeless Dialog")   # ウィンドウタイトル
        dlg_modeless.geometry("300x200")        # ウィンドウサイズ(幅x高さ)

    def create_modal_dialog(self):
        '''モーダルダイアログボックスの作成'''
        dlg_modal = tk.Toplevel(self)
        dlg_modal.title("Modal Dialog") # ウィンドウタイトル
        dlg_modal.geometry("300x200")   # ウィンドウサイズ(幅x高さ)

        # モーダルにする設定
        dlg_modal.grab_set()        # モーダルにする
        dlg_modal.focus_set()       # フォーカスを新しいウィンドウをへ移す
        dlg_modal.transient(self.master)   # タスクバーに表示しない

        # ダイアログが閉じられるまで待つ
        app.wait_window(dlg_modal)  
        print("ダイアログが閉じられた")

if __name__ == "__main__":
    root = tk.Tk()
    app = Application(master = root)
    app.mainloop()

ポイント

  • Toplevelメソッドで新しいウィンドウを作成することができる。
  • Toplevelではデフォルトでモードレスダイアログとなる。
  • モーダルダイアログボックスにするには、grab_set()メソッドを実行する。
  • 新しく作成したウィンドウの表示直後はフォーカスが無いため、フォーカスするにはfocus_set()メソッドを実行する。
  • 新しいウィンドウをタスクバーに表示したくない場合はtransient()メソッドを実行する。
  • モーダルダイアログボックスが閉じられるまで待つには、wait_window(ダイアログ)メソッドで待つ。

【Python/os】パスからファイル名、拡張子、フォルダ名などを取得する

ファイルパスからファイル名、拡張子、フォルダ名などを取得するには、os.pathモジュールを用います。

まずは、サンプルを参照ください。

import os

filepath = r"C:\temp\Image.bmp"

# ファイル名 os.path.basename()
print(os.path.basename(filepath))       # 'Image.bmp'

# フォルダ名 os.path.dirname()
print(os.path.dirname(filepath))        # 'C:\temp'

# 拡張子の取得 os.path.splitext()
print(os.path.splitext(filepath)[1])    # '.bmp'

# 拡張子なしのパス os.path.splitext()
print(os.path.splitext(filepath)[0])    # 'C:\temp\Image'

# 拡張子なしのファイル名 os.path.basename(), os.path.splitext()
print(os.path.splitext(os.path.basename(filepath))[0])    # 'Image'

# ルートディレクトリ os.path.splitdrive()
print(os.path.splitdrive(filepath)[0])  # 'C:'

実行結果

 

使用した関数の説明は以下の通りです。

os.path.basename(path)

パス名(path)から最後の’\’以降のファイル名を返します。

(例)

入力path 戻り値
C:\temp\Images\Image01.bmp Image01.bmp
C:\temp\Images Images

os.path.dirname(path)

パス名(path)のディレクトリ名を返します。

(例)

入力path 戻り値
C:\temp\Images\Image01.bmp C:\temp\Images
C:\temp\Images C:\temp

os.path.splitext(path)

パス名(path)を (拡張子以外, 拡張子)のタプルを返します。

(例)

入力path 戻り値
C:\temp\Images\Image01.bmp (‘C:\\temp\\Images\\Image01’, ‘.bmp’)
C:\temp\Images (‘C:\\temp\\Images’, ”)

os.path.splitdrive(path)

パス名(path)を (ルートディレクトリ, それ以外)のタプルを返します。

(例)

入力path 戻り値
C:\temp\Images\Image01.bmp (‘C:’, ‘\\temp\\Images\\Image01.bmp’)
C:\temp\Images (‘C:’, ‘\\temp\\Images’)

参考

https://docs.python.org/ja/3/library/os.path.html

【Python/NumPy】カラー画像データをRGBからBGRへ変換

カラー画像データは各データが8bit(0~255の256諧調)のR, G, Bの要素からなる24bitカラー画像や、さらに透過率(A)を追加しR, G, B, Aの要素からなる32bitカラー画像があります。

Pythonでは、このカラー画像のデータの並びが使用するモジュールによって異なり、PillowではRGBRGBA の並びとなり、NumPyのndarrayで画像データを管理しているOpenCVでは BGRBGRA の並びとなっています。

つまり、カラー画像をPillowとOpenCV間で変換する場合、画像データの並びも RGB⇔BGRやRGBA⇔BGRA と変換する必要があります。

これを間違うと、RとBが入れ替わった状態となるため、下図のように変な画像になってしまいます。

(正しい画像データの並び)

(間違った画像データの並び)

カラー画像データの事前準備

Pillowでカラー画像を開き、24bitのカラー画像と32bitのカラー画像を用意し、これをNumPyのndarrayへ変換します。

import numpy as np
from PIL import Image
import cv2

# Pillowでカラー画像(RGB)を開く
pillow_rgb24 = Image.open("Mandrill.bmp")
# 24bitカラー(RGB)から32bitカラー(RGBA)へ変換
pillow_rgb32 = pillow_rgb24.convert("RGBA")

###############################
# PillowからNumPyのndarrayへ変換
numpy_rgb24 = np.array(pillow_rgb24) # 24bitカラー(RGB)
numpy_rgb32 = np.array(pillow_rgb32) # 32bitカラー(RGBA)

上記のようにPillowで開いたカラー画像をNumPyへ変換しただけの状態の画像をOpenCVのimshowで表示すると、RとBが入れ替わった画像が表示されます。

cv2.imshow("Image", numpy_rgb24)
cv2.waitKey()

(表示結果)

NumPyでRGB→BGR, RGBA→BGRAへ変換

Pillowのカラー画像をNumPyへ変換した直後のデータは
24bitカラーのとき
[[[R, G, B], [R, G, B], [R, G, B]],
[[R, G, B], [R, G, B], [R, G, B]],
[[R, G, B], [R, G, B], [R, G, B]]]

32bitカラーのとき
[[[R, G, B, A], [R, G, B, A], [R, G, B, A]],
[[R, G, B, A], [R, G, B, A], [R, G, B, A]],
[[R, G, B, A], [R, G, B, A], [R, G, B, A]]]

のように、RGBやRGBAの順で並んでいます。

これをOpenCVで使うときは、データの並びをBGRやBGRAの順へ変換する必要があります。

具体的には

24bitカラーのとき
[[[B, G, R], [B, G, R], [B, G, R]],
[[B, G, R], [B, G, R], [B, G, R]],
[[B, G, R], [B, G, R], [B, G, R]]]

32bitカラーのとき
[[[B, G, R, A], [B, G, R, A], [B, G, R, A]],
[[B, G, R, A], [B, G, R, A], [B, G, R, A]],
[[B, G, R, A], [B, G, R, A], [B, G, R, A]]]

のようにR, G, Bのデータを並び変える必要があります。

このRGB→BGRRGBA→BGRAの変換は以下のように行います。

# NumPyでRGBからBGRへ変換(24bitの場合) その1
numpy_bgr24 = numpy_rgb24[:, :, ::-1]
# NumPyでRGBからBGRへ変換(24bitの場合) その2
numpy_bgr24 = numpy_rgb24[:, :, [2, 1, 0]]

# RGBAからBGRAへ変換(32bitの場合)
numpy_bgr32 = numpy_rgb32[:, :, [2, 1, 0, 3]]

OpenCVでRGB→BGR, RGBA→BGRAへ変換

OpenCVの画像データはNumPyのndarrayなので、PillowからNumPyへ変換した画像データは、そのままOpenCVの関数で処理することができます。

# cvtColorで24bitカラー(RGB)から24bitカラー(BGR)へ変換
numpy_bgr24 = cv2.cvtColor(numpy_rgb24, cv2.COLOR_RGB2BGR)

# cvtColorで32bitカラー(RGBA)から32bitカラー(BGRA)へ変換
numpy_bgr32 = cv2.cvtColor(numpy_rgb32, cv2.COLOR_RGBA2BGRA)

24bitか?、32bitか?を調べる

カラー画像データの並びを入れ替える時は、24bitカラーのときと、32bitカラーのときとで、処理を変える必要があるため、NumPy配列(ndarray)が24bitと32bitのどちらなのか?を調べる必要があります。

それには、NumPyのshapeを取得しshape[2]の値が3であれば24bit、4であれば32bitとなります。

# 24bitか?32bit?かを調べる
print(numpy_rgb24.shape)
print("チャンネル数 = ", numpy_rgb24.shape[2])
print(numpy_rgb32.shape)
print("チャンネル数 = ", numpy_rgb32.shape[2])

(実行結果)

参考

【Python】画像データ(NumPy,Pillow(PIL))の相互変換

【Windows11】拡張モニタにタスクバーを表示する方法

拡張モニタの設定で、拡張にしている時にタスクバーをどのように表示するか?の設定が可能になります。

設定方法はタスクバーの何も無い領域を右クリックし、タスクバーの設定をクリックします。

表示されたウィンドウの右側をスクロースし、下の方にあるタスクバーをすべてのディスプレイに表示するにチェックを入れた状態にします。

タスクバーをすべてのディスプレイに表示するにチェックを入れると、拡張モニタ側にもタスクバーが表示されますが、さらに各ウィンドウで起動しているアプリの表示設定が可能です。

複数ディスプレイを使用する場合にタスクバーアプリを表示する場所の設定で、切り替えます。

すべてのタスクバー

下の画像は見づらいですが、アプリのアイコンがすべてのディスプレーに同じように表示されます。

メインタスクバーと、開かれているウィンドウのタスクバー

メインのディスプレイにはすべてのアプリが表示され、拡張モニタには、拡張モニタ側で起動しているアプリのみ(検索、タスクビュー、ウィジェットを除く)が表示されます。

開かれているウィンドウのタスクバー

メインのディスプレー、拡張ディスプレイ、それぞれに起動されているアプリが表示されます。

 

ただし、メインディスプレイの右下に表示されている時計や常駐ソフトの表示は、拡張モニタ側には表示できないようです。USBを外すとかが拡張モニタ側でできないのが残念。。

【Windows11】拡張ディスプレーの表示切替

ノートパソコンなどを液晶モニタに接続して表示する場合、普通のノートパソコンであれば fnキー + f4キー などを押すと

のようなウィンドウが表示され、画面を複製して出力するのか?拡張するのか?拡張モニタのみ表示するのか?が選べると思いますが、私の使っている Microsoft の Surfaceには、このキーが無いんです。。

そのため、拡張モニタの出力切替方法を調べてみました。

Windowsキー(スタートキー) + P

Windowsキー(スタートキー) + P を押すと、拡張モニタの切り替え用ウィンドウが表示されます。

このショートカットキーを覚えてさえいれば、これが一番簡単です。

モビリティーセンターより表示

スタートボタンを右クリックし、モビリティーセンターを選択します。

次に表示されたウィンドウのディスプレーの接続をクリックします。

すると、下図のような画面が表示されるので、表示方法を選択します。

デスクトップ画面を右クリック

デスクトップ画面を右クリックし、ディスプレイ設定をクリックします。

すると、これまでの画面とは異なりますが、プルダウンメニューより表示方法を選択します。

上の画面の設定では、拡張モニタの表示配置や、解像度など、より細かい設定が可能となります。

【Windows11】スタートアップアプリを無効にする方法

私のPCの場合、PCの起動後、下図のようなXboxのアプリウィンドウが起動してしまうため、これを無効にしたい。

ということで、スタートアップで起動するアプリを無効にする方法の説明です。

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

表示された画面のアプリをクリックし、右側のメニューをスクロールし、一番下に表示されているスタートアップをクリックします。

 

スタートアップに登録されているアプリの一覧が表示されているので、この中からPCの起動時に実行したくないアプリ(私の場合、Xbox App Services)があれば、オフに設定します。

すると次回起動時からは、アプリが起動しなくなります。

【Windows11】アプリのショートカットの作成方法

Windows11では、これまでのWindowsのようにアプリのショートカットをデスクトップに配置するよりも、スタートにピン留めした方が使いやすいと思いますが、従来と同様にショートカットを作成することも可能です。

ショートカットの作成方法は、スタートメニューより、右上のすべてのアプリをクリックします。

表示されたアプリの中から、ショートカットを作成したいアプリの名前をデスクトップへドラッグするとリンクと表示されるので、デスクトップ上でドロップします。

すると、デスクトップ上にアプリのショートカットが作成されます。

【Windows11】スタートにピン留めする方法

スタートにピン留めの機能は下図のように、スタート画面の上半分にアプリやフォルダへのショートカットを表示する機能となります。

スタートにピン留めの機能はWindows10にも機能はありましたが、Windows11では程よいアイコンのサイズでスマホやタブレット感覚で使えるため、Windows11の機能の中でもお気に入りの機能です。

このスタートにピン留めする方法はいくつかあるので、紹介したいと思います。

すべてのアプリからピン留めする方法

スタート画面右上のすべてのアプリをクリックし、アプリを表示します。

スタートにピン留めしたアプリを右クリックし、スタートにピン留めするをクリックすると、スタートにピン留めされます。

デスクトップのショートカットからピン留めする

デスクトップに表示されているショートカットを右クリックし、表示されたメニューのスタートメニューにピン留めするをクリックし、スタートにピン留めします。

タスクバーの実行されているアプリからピン留めする

実行しているアプリはタスクバーに表示されていますが、タスクバーのアイコンを右クリックし、表示されたメニュー内のアプリ名の部分を右クリックし、スタートメニューにピン留めするをクリックします。

アプリの検索結果からピン留めする

検索画面よりアプリを検索し、表示された検索結果を右クリックし、スタートにピン留めするをクリックすることで、スタートにピン留めします。

エクスプローラーからフォルダをピン留めする

エクスプローラーで、ピン留めしたいフォルダ名を右クリックしメニューを表示し、スタートメニューにピン留めするをクリックし、スタートにピン留めします。

アイコンを整列する

スタートにピン留めしたアプリのアイコンは、ドラッグ&ドロップにより並び替えることができます。

アイコンを並び替えることで、Windowsの使い勝手がかなり良くなると思います。

【Windows11】高速スタートアップを無効にする方法

高速スタートアップの機能は、ほとんどの場合、有効になっており、PCの起動速度を高速できる効果はあるものの、PCに拡張ボードなどを追加している場合、この高速スタートアップの機能により不具合を起こす場合があります。

そのため、この高速スタートアップを無効にする方法を紹介します。

 

まず、こちらのページ↓を参考にコントロールパネルを表示してください。

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

表示されたコントロールパネルより、ハードウェアとサウンドをクリックします。

電源オプション内にある電源ボタンの動作の変更をクリックします。

表示された画面の下の方に高速スタートアップを有効にするの表示がありますが、この設定を変更できるように、現在利用可能ではない設定を変更しますをクリックします。

すると、高速スタートアップを有効にするの設定が可能になるので、チェックを外し、変更の保存をクリックします。

これで、高速スタートアップの設定が無効となります。

【Windows11】OSバージョンの確認方法

Windows11のバージョンの確認方法です。

 

スタートボタンを右クリックし、設定を選択します。

左側のシステムを選択し、右側のメニューを下の方にスクロールし、バージョン情報を選択します。

すると、下図のように表示されます。

※上の画面はWindowsw11 Preview版です。

上の画面はPreview版のため、Updateの部分がバージョンに替わる可能性がありますが、この例では、

OSエディション:Windows 11 Home

バージョン:21H2

となります。

 

他にも、検索画面からプログラムを実行してバージョンを確認する方法を紹介します。

タスクバーの検索(虫眼鏡アイコン)をクリックし、検索ウィンドウを表示し、 winver と入力し、エンターキーを入力すると、バージョン情報のウィンドウが表示されます。

表示された Windowsのバージョン情報

【Windows11】ダークモード、ライトモードの設定

ダークモードは、Visual Studioなどでは設定している人も増えてきましたが、Windows11でもOSレベルでダークモードを設定する事が出来ます。

ダークモードの設定は、スタートボタンを右クリックし、メニューの設定を選択します。

設定ウィンドウの左側から個人設定を選択し、右側のをクリックします。

色を選択するの右側に、初期状態ではライトと表示されている部分をクリックすると、ライト、ダーク、カスタムの3つのモードが選択されるようになっています。

この中から、ダークを選択すると、下図のようになります。

ライトを選択すると、

のようになります。

カスタムを選択すると、下図のように表示されますが、規定のWindowsモードを選択してください の部分の設定はWindowsのスタート画面などの背景色の設定で、規定のアプリモードを選択します の部分はエクスプローラーなど、ウィンドウアプリの背景色の設定を個別に設定することができます。

 

規定のWindowsモードを選択してください → ライト

規定のアプリモードを選択します → ダーク

の設定にすると

 

規定のWindowsモードを選択してください → ダーク

規定のアプリモードを選択します → ライト

の設定にすると

のようになります。

ちなみに、Windows11の色の選択をダークに設定し、Visual Studio 2019の色の設定をライトにすると、Visual Studio 2019の設定の方が優先的に表示されました。