プログラミング演習Ⅲ(2023)

【課題5-06】市松模様(加点)

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_5_06
ソリューション名PET5
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

市松模様を含む画像ファイルを生成するプログラムを作成せよ.

注意

C#で画像を扱う方法

表示するにはここをクリック

C#で画像を扱う方法はいくつかあるが,ここではSkiaSharpという ライブラリを使用する方法を紹介する.

このライブラリをプロジェクトにインストールして以下のように書くと,実行ファイルと同じ場所に output.pngという赤一色の画像ファイルが作られる(このプログラムを実行するには後述するプロジェクトの設定が必要である).

画像を生成するプログラム
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using SkiaSharp; // 追記

namespace Prac_5_06
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 画像を作る(512 x 512 ピクセル)
            SKBitmap img = new SKBitmap(512, 512);

            for (int y = 0; y < img.Height; ++y) 
            {
                for (int x = 0; x < img.Width; ++x) 
                {
                    // 描画色を赤(RGB=〈255,0,0〉)にする
                    SKColor color = new SKColor(255, 0, 0);

                    // 画像の座標(x, y)の位置のピクセルを↑の色で塗る
                    img.SetPixel(x, y, color);
                }//for
            }//for

            // 生成した画像を output.png という名前でファイルに保存する.
            using (Stream file = File.Open("output.png", FileMode.Create))
            {
                img.Encode(file, SKEncodedImageFormat.Png, 0);
            }//using        

        }// end of Main()
    }// end of class Program
}// end of namespace

SkiaSharpを使用するためには以下の手順を行えばよい.

  • 【手順】SkiaSharpのセットアップ手順
    1. C#の「コンソールアプリ」タイプのプロジェクトを用意する(_)
    2. ソリューションエクスプローラー上で設定を行うプロジェクトを右クリックして,「NuGetパッケージの管理」をクリックする(_).
    3. 「参照」をクリックして検索欄に「SkiaSharp」と入力する.「SkiaSharp」が検索されるので1,画面右側の「インストール」ボタンをクリックする(_).
      • この際いくつか確認が表示されるので「OK」など肯定的な選択を行う(__).
    4. ボタンが「アンインストール」に変わったらインストール完了である(_).
SkiaSharpのセットアップ

以上のセットアップを行い_のプログラムを書き込んで実行すると画像が生成されファイルに保存される. 保存された画像ファイルを確認するには以下の手順を行う.

  • 【手順】出力画像の確認方法
    1. Main()メソッドにプログラムを書きこんで実行する(_).
      • コンソールには何も表示されない(正常な動作).この画面は閉じてもよい(_).
    2. ソリューションエクスプローラー上で実行したプロジェクトを右クリックして,「エクスプローラーでフォルダーを開く」をクリックする(_).
    3. エクスプローラーの画面が開くので「bin」→「Debug」→「net6.0」とナビゲートする(_(4)~_).
    4. プログラム内の img.Save(...) メソッドに渡した文字列同じファイル名の画像ファイルが作られている(_).
      • この画像ファイルを開くと,サンプルの通り書いていれば赤く塗りつぶされた画像が表示されるはずである(_).
生成された画像ファイルの確認方法

詳しい操作方法が分からない場合は,_の動画を参考にするとよい23

SkiaSharpライブラリをプロジェクトに追加するための設定
表示するにはここをクリック : 閉じる

_をベースとして,_のような市松模様を含む画像を生成するプログラムを作成せよ.画像サイズは_の通り縦横512×512ピクセルで固定とする.

市松模様(1マス→64x64ピクセル)

この市松模様の以下の特徴は自在に変更できるようにすること.

  • 1つのマスの大きさ
  • マスの色1
  • マスの色2

このために_のように以下のような定数を用意すること.

あらかじめ用意する定数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
internal class Program
{
    private static readonly int CellSize = 64; // 1つのマスの大きさ(64ピクセル)
    private static readonly SKColor CellColor1 = new SKColor(233, 71,  63); // マスの色1
    private static readonly SKColor CellColor2 = new SKColor( 78, 62, 149); // マスの色2

    static void Main(string[] args)
    {
        // 画像を作る(512 x 512 ピクセル)
        SKBitmap img = new SKBitmap(512, 512);

        for (int y = 0; y < img.Height; ++y) 
        {
    // ... 以下省略 ...

ヒント1

表示するにはここをクリック

処理している画素の位置が市松模様の何マス目にいるのかを考えよう.

処理している画素の位置が$(x,y)$なら,下式によって左から$n$マス目,上から$m$マス目にいることを計算することができるはずである.

$$ m = \left\lfloor\frac{y}{B}\right\rfloor $$

$$ n = \left\lfloor\frac{x}{B}\right\rfloor $$

$B$はマスのサイズ(ピクセル),$\lfloor x \rfloor$という表記は$x$の整数部分を意味する(つまり小数点以下切り捨て.整数として計算すれば特別なことをしなくてもそのようになる).

表示するにはここをクリック : 閉じる

ヒント2

表示するにはここをクリック

処理している画素の位置が$(x,y)$で,左から$n$マス目,上から$m$マス目にいる. この$n$,$m$の奇偶(奇数か偶数か)と,模様の色の関係を考えてみよう(_). ここでは便宜上,ゼロは偶数として扱う.

?マスの目の奇偶

どういうときに色1のマスになり,どういうときに色2のマスになっているだろうか?

表示するにはここをクリック : 閉じる

  1. 検索結果に表示されるアイコンはバージョンなどによって異なるので注意せよ.必ずしも_と全く同じ表示となるわけではないので名前をよく見て適切なライブラリを選択すること. ↩︎

  2. Apple社の都合により,iPhone,iPadなどのデバイスでは動画の再生はできません(Apple社はスマートフォン/タブレット製品で,意図的?にVPxやAV1コーデックのサポートを遅らせているため.参考1参考2). ↩︎

  3. Microsoft Edge で動画を閲覧するためには,AV1 Extensionをインストールする必要があります. ↩︎

Last updated on 2023-11-09
Published on 2023-11-09

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.