最近在学习GDI 在网上找了段代码 就是 移动pictureBox1中的图片
但是在运行时老提示说; Bitmap bm = new Bitmap(this.pictureBox1.Image);中this.pictureBox1.Image 和 bm 的值为 null 求大侠解答。啊啊
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
foreach (Control c in this.Controls)
{
if (c is PictureBox)
{
c.MouseMove += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseMove);
c.MouseDown += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseDown);
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
/* Graphics g = this.CreateGraphics();//生成图形对象
SolidBrush BlueBrush = new SolidBrush(Color.Blue);//生成填充用的画刷
int x = 15;//定义外接矩形的左上角坐标和高度及宽度
int y = 15;
int width = 200;
int height = 100;
Rectangle rect = new Rectangle(x, y, width, height);//定义矩形
g.FillRectangle(BlueBrush, rect);//填充矩形*/
OpenFileDialog ofd = new OpenFileDialog();//实例化文件打开对话框
ofd.Filter = "JPG|*.jpg|Bmp|*.bmp|所有文件|*.*";//设置对话框打开文件的括展名
if (ofd.ShowDialog() == DialogResult.OK)
{
Bitmap bmpformfile = new Bitmap(ofd.FileName); //获取打开的文件
Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height); //新建画布
//Graphics g = Graphics.FromImage(bmp); //新建画布
Graphics g = pictureBox1.CreateGraphics();
g.DrawImage(bmpformfile, 0, 0);
// g = pictureBox1.CreateGraphics();
g.DrawImage(bmp, 0, 0);
ofd.Dispose();
}
}
bool wselected = false;
Point p = new Point();
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
pictureBox1.Cursor = Cursors.Hand; //按下鼠标时,将鼠标形状改为手型
wselected = true;
p.X = e.X;
p.Y = e.Y;
}
int driftX = 0, driftY = 0;
int mx = 0, my = 0;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (wselected)
{
driftX = p.X - e.X;
driftY = p.Y - e.Y;
mx = mx - driftX;
my = my - driftY;
Bitmap bm = new Bitmap(this.pictureBox1.Image);
Graphics g = pictureBox1.CreateGraphics();
g.Clear(pictureBox1.BackColor);
g.DrawImage(bm, mx, my);
p.X = e.X;
p.Y = e.Y;
bm.Dispose();
g.Dispose();//图像移动的距离
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
pictureBox1.Cursor = Cursors.Default; //松开鼠标时,形状恢复为箭头
wselected = false ;
this.pictureBox1.Cursor = Cursors.Default;
}
}
/// <summary> /// method to rotate an image either clockwise or counter-clockwise /// </summary> /// <param name="img">the image to be rotated</param> /// <param name="rotationAngle">the angle (in degrees). /// NOTE: /// Positive values will rotate clockwise /// negative values will rotate counter-clockwise /// </param> /// <returns></returns> public static Image RotateImage(Image img, float rotationAngle) { //create an empty Bitmap image Bitmap bmp = new Bitmap(img.Width, img.Height); //turn the Bitmap into a Graphics object Graphics gfx = Graphics.FromImage(bmp); //now we set the rotation point to the center of our image gfx.TranslateTransform((float)bmp.Width / 2, (float)bmp.Height / 2); //now rotate the image gfx.RotateTransform(rotationAngle); gfx.TranslateTransform(-(float)bmp.Width / 2, -(float)bmp.Height / 2); //set the InterpolationMode to HighQualityBicubic so to ensure a high //quality image once it is transformed to the specified size gfx.InterpolationMode = InterpolationMode.HighQualityBicubic; //now draw our new image onto the graphics object gfx.DrawImage(img, new Point(0, 0)); //dispose of our Graphics object gfx.Dispose(); //return the image return bmp; }