
C#中 如何在picturebox中显示图片
我想要把pictureBox1中的图片进行旋转后放入控件pictureBox2中,代码如下:privatevoid旋转图像ToolStripMenuItem_Click(...
我想要把pictureBox1中的图片进行旋转后放入控件pictureBox2中,代码如下:
private void 旋转图像ToolStripMenuItem_Click(object sender, EventArgs e)
{
Bitmap box1 = new Bitmap(pictureBox1.Image);//把图片框中的图片给一个bitmap类型
Bitmap box2 = new Bitmap(pictureBox1.Image);
Graphics g = pictureBox2.CreateGraphics();
g.Clear(this.pictureBox2.BackColor);
float x =(float)Double.Parse(textBox1.Text);
g.RotateTransform(x);//旋转x角度
g.DrawImage(box1, this.pictureBox2.ClientRectangle, 0, 0, box2.Width, box2.Height, GraphicsUnit.Pixel);//图片框2重画
}
执行后,pictureBox2中确实显示了旋转后的图片,但是似乎图片仅限于在屏幕上显示,而没有放入到pictureBox2.image中,而且后面对pictureBox2中这个图像也不能进行操作。如果用下面的代码测试:
if (pictureBox2.Image == null)
MessageBox.Show("null");
则会弹出null消息框。
我想问:
怎么将图片放到pictureBox2.image中,便于后续操作。
或者,graphics类与bitmap如何转化?
还有问题,虽然图片在pictureBox2中显示了,但是最小化后,图片就不见了,怎么解决这个问题?
1楼的回答我试了一下,似乎要using system.windows.media
但是又产生了错误,貌似是system.windows.media和system.drawing冲突了。
里面的color类等不能明确是哪个命名空间下的。
请问这个问题怎么解决。。万分谢谢。。。
PS:PresentationCore已经添加引用了。 展开
private void 旋转图像ToolStripMenuItem_Click(object sender, EventArgs e)
{
Bitmap box1 = new Bitmap(pictureBox1.Image);//把图片框中的图片给一个bitmap类型
Bitmap box2 = new Bitmap(pictureBox1.Image);
Graphics g = pictureBox2.CreateGraphics();
g.Clear(this.pictureBox2.BackColor);
float x =(float)Double.Parse(textBox1.Text);
g.RotateTransform(x);//旋转x角度
g.DrawImage(box1, this.pictureBox2.ClientRectangle, 0, 0, box2.Width, box2.Height, GraphicsUnit.Pixel);//图片框2重画
}
执行后,pictureBox2中确实显示了旋转后的图片,但是似乎图片仅限于在屏幕上显示,而没有放入到pictureBox2.image中,而且后面对pictureBox2中这个图像也不能进行操作。如果用下面的代码测试:
if (pictureBox2.Image == null)
MessageBox.Show("null");
则会弹出null消息框。
我想问:
怎么将图片放到pictureBox2.image中,便于后续操作。
或者,graphics类与bitmap如何转化?
还有问题,虽然图片在pictureBox2中显示了,但是最小化后,图片就不见了,怎么解决这个问题?
1楼的回答我试了一下,似乎要using system.windows.media
但是又产生了错误,貌似是system.windows.media和system.drawing冲突了。
里面的color类等不能明确是哪个命名空间下的。
请问这个问题怎么解决。。万分谢谢。。。
PS:PresentationCore已经添加引用了。 展开
2个回答
展开全部
不要using system.windows.media
在提升你需要该引用的地方System.Drawing.Image
或者将鼠标移动到提示有问题的地方捕获一下那个小方格,然后选择System.Drawing.Image 这样就行了
private void button1_Click(object sender, EventArgs e)
{
Bitmap box2 = new Bitmap(pictureBox1.Image);
float x = (float)Double.Parse(textBox1.Text);
box2 = RotateBitmap(box2, x, this.pictureBox2.BackColor);
System.Drawing.Image image = System.Drawing.Image.FromHbitmap(box2.GetHbitmap());
pictureBox2.Image = image;
}
public Bitmap RotateBitmap(Bitmap bmp, float angle, Color bkColor)
{
int w = bmp.Width + 2;
int h = bmp.Height + 2;
PixelFormat pf;
if (bkColor == Color.Transparent)
{
pf = PixelFormat.Format32bppArgb;
}
else
{
pf = bmp.PixelFormat;
}
Bitmap tmp = new Bitmap(w, h, pf);
Graphics g = Graphics.FromImage(tmp);
g.Clear(bkColor);
g.DrawImageUnscaled(bmp, 1, 1);
g.Dispose();
GraphicsPath path = new GraphicsPath();
path.AddRectangle(new RectangleF(0f, 0f, w, h));
Matrix mtrx = new Matrix();
mtrx.Rotate(angle);
RectangleF rct = path.GetBounds(mtrx);
Bitmap dst = new Bitmap((int)rct.Width, (int)rct.Height, pf);
g = Graphics.FromImage(dst);
g.Clear(bkColor);
g.TranslateTransform(-rct.X, -rct.Y);
g.RotateTransform(angle);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImageUnscaled(tmp, 0, 0);
g.Dispose();
tmp.Dispose();
return dst;
}
在提升你需要该引用的地方System.Drawing.Image
或者将鼠标移动到提示有问题的地方捕获一下那个小方格,然后选择System.Drawing.Image 这样就行了
private void button1_Click(object sender, EventArgs e)
{
Bitmap box2 = new Bitmap(pictureBox1.Image);
float x = (float)Double.Parse(textBox1.Text);
box2 = RotateBitmap(box2, x, this.pictureBox2.BackColor);
System.Drawing.Image image = System.Drawing.Image.FromHbitmap(box2.GetHbitmap());
pictureBox2.Image = image;
}
public Bitmap RotateBitmap(Bitmap bmp, float angle, Color bkColor)
{
int w = bmp.Width + 2;
int h = bmp.Height + 2;
PixelFormat pf;
if (bkColor == Color.Transparent)
{
pf = PixelFormat.Format32bppArgb;
}
else
{
pf = bmp.PixelFormat;
}
Bitmap tmp = new Bitmap(w, h, pf);
Graphics g = Graphics.FromImage(tmp);
g.Clear(bkColor);
g.DrawImageUnscaled(bmp, 1, 1);
g.Dispose();
GraphicsPath path = new GraphicsPath();
path.AddRectangle(new RectangleF(0f, 0f, w, h));
Matrix mtrx = new Matrix();
mtrx.Rotate(angle);
RectangleF rct = path.GetBounds(mtrx);
Bitmap dst = new Bitmap((int)rct.Width, (int)rct.Height, pf);
g = Graphics.FromImage(dst);
g.Clear(bkColor);
g.TranslateTransform(-rct.X, -rct.Y);
g.RotateTransform(angle);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImageUnscaled(tmp, 0, 0);
g.Dispose();
tmp.Dispose();
return dst;
}
参考资料: http://hi.baidu.com/bruttle/blog/item/d6b5488de0fe5413b21bba25.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询