在下面的代碼:GDI +漸變效果
void f13(Graphics g)
{
g.FillRectangle(new SolidBrush(Color.Black), pictureBox1.ClientRectangle);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
var zf = .0143;
const int w = 6000, h = 10, margin = 40;
var bmp = new Bitmap(w + 2 * margin, h + 2 * margin);
var bmpG = Graphics.FromImage(bmp);
bmpG.FillRectangle(new SolidBrush(Color.White), 0, 0, bmp.Width, bmp.Height);
var srcRect = new RectangleF(margin - .5f, margin - .5f, w, h);
zf = (float)Convert.ToInt32(w * zf)/w;
var destRect = new Rectangle(0, 0, Convert.ToInt32(w * zf), Convert.ToInt32(w * zf));
g.DrawImage(bmp, destRect, srcRect, GraphicsUnit.Pixel);
destRect.X += destRect.Width;
g.DrawImage(bmp, destRect, srcRect, GraphicsUnit.Pixel);
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
f13(e.Graphics);
}
我得到兩個矩形之間的間隙:
micro http://www.uploadup.com/di-0HXM.png macro http://www.uploadup.com/di-G1O5.png
這是爲什麼?
如果間隙線不太清晰,可能會降低邊距。如果你把它設置爲10,你會得到:
macro, less margin http://www.uploadup.com/di-P2ZT.png
添加'g.PixelOffsetMode = PixelOffsetMode.Half;'所以浮點舍入錯誤不是字節。 – 2012-04-18 13:28:29
感謝漢斯, 這降低了保證金的價值9.現在即使有8個差距出現。我仍然可以解釋這一點,並不知道PixelOffsetMode是什麼。你會解釋更多嗎? – hamidi 2012-04-21 08:32:25
我還評論了設置插值模式的線條,這導致邊距必須增加。使用默認插值模式時,邊距必須至少爲18. GDI +中發生了什麼以及我如何在其中找到我的方式? – hamidi 2012-04-21 08:36:01