グラデーションを追加してみた。
パターンクラス。
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%分どっかでさっ引いてくだちい。