読者です 読者をやめる 読者になる 読者になる

グラデーションを追加してみた。


パターンクラス。

namespace Color_Bar.BarPattern
{
    class BarGrayFullGradation : BarPatternBase
    {
        private const int gradCount = 0x50; // 階調数
        
        protected override int getHeight()
        {
            return 4;
        }

        protected override Int32[] getBarcolor()
        {
            Int32[] colorarray = new Int32[gradCount + 1];

            for (int i = 0; i < colorarray.Length; i++) {
                Int32 cvalue = (0xFF * i) / gradCount;
                colorarray[i] = cvalue * 0x010000 + cvalue * 0x0100 + cvalue;
            }
            return colorarray;
        }
    }
}

完全なグラデーションにするならgradCountを0xFFにするヨロシ。


パターンの追加例

    class DrowImageSMPTEX : DrawImageBase
    {
        /// <summary>
        /// SMTPE形式に準じたカラーバーを表示。
        /// 下段1/4はオリジナル
        /// </summary>
        /// <param name="aimg">描画するカンバス</param>
        protected override void doDrowImage(Bitmap aimg)
        {
            Rectangle barRect = new Rectangle();

            barRect.X = 0;
            barRect.Width = aimg.Width;
            barRect.Y = 0;

            foreach (IBarPattern barPattern in BarPattern())
            {
                /* 
                 * 座標計算の都合上、積み上げでheightを合計100%分正確に描画すると下に空白が出来る
                 * overshoot[pix]分縦に長めに描画しておくことで、100%描画したときに空白が出来ない
                 * バーパターン1つにつき最大1pix縮まるので、最低でパターン数分オーバーシュートしとけばいい
                 * 毎度計算しても面倒なので、大体で定義
                 */
                const int overshoot = 20;

                barRect.Height = overshoot + (aimg.Height * barPattern.height) / 100;
                this.DrowColorBar(aimg, barPattern, barRect);
                barRect.Y = barRect.Bottom - overshoot;
            }
        }

        static public IEnumerable<IBarPattern> BarPattern()
        {
            yield return new Bar7Color();
            yield return new Bar7RevColor();
            yield return new BarGrayColorMixed();
            yield return new BarGrayGradation();
            yield return new BarGrayFullGradation(); // ←ここに追加
        }
    }
}

あ、後、他のカラーパターンから縦4%分どっかでさっ引いてくだちい。