C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: グラデーションの描画で1ライン色がおかしくなります。


(過去ログ 139 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■81640 / inTopicNo.1)  グラデーションの描画で1ライン色がおかしくなります。
  
□投稿者/ 夜叉丸 (10回)-(2016/10/21(Fri) 13:06:15)

分類:[.NET 全般] 

Windows7 Visualstudio2010 にて

フォームにPictureBox を貼り付けて以下を実行すると
1番上の1ラインに 206 のカラーで描画されます。


Rectangle ra = new Rectangle(2, 11, 30, 11);
LinearGradientBrush gradBrush2 = new LinearGradientBrush(ra, Color.FromArgb(219, 219, 219), Color.FromArgb(206, 206, 206), LinearGradientMode.Vertical);
pictureBox1.CreateGraphics().FillRectangle(gradBrush2, ra);

ただいつもなるわけではなく以下の場合は最上部の1ラインは219 のカラーになります。
Rectangle ra = new Rectangle(2, 11, 30, 10);

どうしてでしょうか?

引用返信 編集キー/
■81655 / inTopicNo.2)  Re[1]: グラデーションの描画で1ライン色がおかしくなります。
□投稿者/ 魔界の仮面弁士 (928回)-(2016/10/24(Mon) 11:56:10)
No81640 (夜叉丸 さん) に返信
> フォームにPictureBox を貼り付けて以下を実行すると
> 1番上の1ラインに 206 のカラーで描画されます。

この不具合を緩和する方法として、PixelOffsetMode プロパティを
Default → Half へと変更するという手が知られています。


using (var g = pictureBox1.CreateGraphics())
{
    g.PixelOffsetMode = PixelOffsetMode.Half;
    g.FillRectangle(gradBrush2, ra);
}


描画する高さを 14〜8 と変化させながら実測してみました。

左の Dxx な表は:PixelOffsetMode.Default
右の Hxx な表は:PixelOffsetMode.Half


Ln┃D14|D13|D12|D11|D10|D09|D08┃H14|H13|H12|H11|H10|H09|H08┃Ln
--╂---+---+---+---+---+---+---╂---+---+---+---+---+---+---╂--
_1┃206|219|206|206|219|206|219┃218|218|218|218|218|218|218┃_1
_2┃218|218|218|218|217|217|217┃217|217|217|217|217|217|217┃_2
_3┃217|217|217|217|217|216|216┃217|217|215|216|216|216|215┃_3
_4┃217|216|216|216|215|215|214┃216|216|214|215|214|214|213┃_4
_5┃215|215|215|214|214|213|213┃215|214|213|213|213|213|212┃_5
_6┃214|214|213|213|213|212|211┃214|213|212|213|212|211|210┃_6
_7┃213|213|213|212|211|210|209┃213|213|211|212|211|209|208┃_7
_8┃213|212|212|211|210|209|208┃212|212|210|210|209|208|207┃_8
_9┃212|211|210|209|208|208|___┃211|211|208|209|208|207|___┃_9
10┃211|210|209|208|208|___|___┃210|209|208|208|207|___|___┃10
11┃210|209|208|207|___|___|___┃209|208|208|207|___|___|___┃11
12┃208|208|207|___|___|___|___┃208|208|207|___|___|___|___┃12
13┃208|207|___|___|___|___|___┃208|207|___|___|___|___|___┃13
14┃207|___|___|___|___|___|___┃207|___|___|___|___|___|___┃14


期待する結果(最上位ラインが219、最下位が206)からは多少外れますが、
最上位に 206 が来るよりは、幾分マシになると思います。

引用返信 編集キー/
■81657 / inTopicNo.3)  Re[2]: グラデーションの描画で1ライン色がおかしくなります。
□投稿者/ Hongliang (465回)-(2016/10/24(Mon) 17:00:16)
縦グラデーションのLinearGradientBrushの場合、
・描画対象の領域から高さを1だけ減らした矩形で初期化
・WrapModeをTileFlipXに設定
してやれば219〜206になる…かな?
// Bitmapへの描画なら正しくできるようだけど、それ以外への描画は未調査。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -