mbe*_*ish 2 c# gdi+ rotation drawrectangle
当我运行以下代码时:
private void button1_Click(object sender, EventArgs e)
{
Bitmap b = new Bitmap(300, 400);
using (Graphics g = Graphics.FromImage(b))
{
g.FillRectangle(Brushes.Black, new Rectangle(0, 0, 300, 400));
}
b.RotateFlip(RotateFlipType.Rotate90FlipNone);
using (Graphics g2 = Graphics.FromImage(b))
{
g2.DrawRectangle(new Pen(Color.White, 7.2f), 200, 100, 150, 100);
}
using (Graphics g3 = this.panel1.CreateGraphics())
{
g3.DrawImage(b, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:
alt text http://www.freeimagehosting.net/uploads/2c309ec21c.png
笔记:
它只发生在我旋转图像,然后绘制一个超出图像原始尺寸的矩形时.
矩形不会截断为原始图像宽度 - 仅绘制矩形的右边缘.
这种情况发生在各种情况中.我首先在一个更复杂的应用程序中注意到它 - 我只是编写了这个应用程序来简单说明问题.
谁能看到我做错了什么?
这似乎是微软自至少2005年以来就已经知道的一个GDI +错误(http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=96328).我能够重现你描述的问题.一种可能的解决方案是在第一个位图之外创建第二个位图,然后绘制它.以下代码似乎正确绘制:
private void button1_Click(object sender, EventArgs e) {
Bitmap b = new Bitmap(300, 400);
using (Graphics g = Graphics.FromImage(b)) {
g.FillRectangle(Brushes.Black, new Rectangle(0, 0, 300, 400));
}
b.RotateFlip(RotateFlipType.Rotate90FlipNone);
Bitmap b2 = new Bitmap(b);
using (Graphics g2 = Graphics.FromImage(b2)) {
g2.DrawRectangle(new Pen(Color.White, 7.2f), 200, 100, 150, 100);
}
using (Graphics g3 = this.panel1.CreateGraphics()) {
g3.DrawImage(b2, 0, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
alt text http://www.freeimagehosting.net/uploads/f6ae684547.png