酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

ASP.NET MVC 5で動的に生成したグラデーションを描画した画像を返す

ASP.NET MVC 5でサーバーサイドで動的に生成した画像を返す - 酢ろぐ!」の応用例です。……といってもGraphicsクラスを使った描画と違いはありませんね。

using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Web.Mvc;

namespace Test1.Controllers
{
    public class Graphics2Controller : Controller
    {
        private Bitmap GetBackgroundImage(int width, int height,
            Color startColor, Color endColor)
        {
            var image = new Bitmap(width, height);

            using (var g = Graphics.FromImage(image))
            {
                g.SmoothingMode = SmoothingMode.HighQuality;

                // グラデーション描画用のブラシを作成
                var brush = new LinearGradientBrush(new Point(0, height),
                    new Point(width, 0), startColor, endColor);

                // 画像の背景を描画する
                g.FillRectangle(brush, new Rectangle(0, 0, width, height));
            }

            return image;
        }

        public ActionResult Index()
        {
            var width = 640;
            var height = 300;
            var startColor = Color.FromArgb(233, 19, 29);
            var endColor = Color.FromArgb(235, 115, 52);

            // 画像を生成する
            var ms = new MemoryStream();
            using (var image = GetBackgroundImage(width, height, startColor, endColor))
            {
                // 描画したビットマップをPNGとしてストリームへ保存する
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                ms.Position = 0;
            }

            // サーバーサイドで実装したPNG画像を返す
            return new FileStreamResult(ms, "image/png");
        }
    }
}

Indexメソッドが実行されると下図のような画像を表示します。

f:id:ch3cooh393:20140821023504p:plain