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

【課題8-07】ドーナッツ(加点)

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_8_07
ソリューション名PET8
ターゲットフレームワーク.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_8_07
{
    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ピクセルで固定とする.

ドーナツ模様(中心位置(255,255),内半径100,外半径200)

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

  • 円の中心位置
  • 内半径
  • 外半径
  • 前景色(円の内側の色)
  • 背景色(円の外側の色)

このために_のようにMain()メソッドの冒頭に以下のような定数を用意すること.

あらかじめ用意する定数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
internal class Program
{
    private static readonly int CenterX = 255; // 円の中心位置の x 座標
    private static readonly int CenterY = 255; // 円の中心位置の y 座標
    private static readonly int InnerRadius = 100;  // 内半径
    private static readonly int OuterRadius = 200;  // 外半径
    private static readonly SKColor ForeColor = new SKColor(251, 201, 62); // 前景色(塗りつぶし色)
    private static readonly SKColor BackColor = new SKColor(176, 67, 105); // 背景色

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

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

ヒント

なし


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

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

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

Last updated on 2023-12-06
Published on 2023-12-06

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