C#Bitmap裁剪图片后显示在pictureBox内,形成图片移动效果
2015-01-06 12:38
459 查看
用户界面大作业,选择时区时将地图上该时区显示在图片中间。
就是这样,地图是720*180的,含有两个世界地图,足够剪裁出时区在中间的360*180图,所以pictureBox是360*180的。
这是复制剪裁图片的函数,
在选择时区后调用
就是这样,地图是720*180的,含有两个世界地图,足够剪裁出时区在中间的360*180图,所以pictureBox是360*180的。
这是复制剪裁图片的函数,
private void Clone_map(/*PaintEventArgs e,*/int X) { Bitmap myBitmap = new Bitmap("D:/C#Projects/8-image/timezone_map.GIF");//myBitmap复制过来
//之前这里写的是<span style="font-family: Arial, Helvetica, sans-serif;">Bitmap myBitmap = new Bitmap(pictureBox_map.Image);结果只能剪裁一次,再选择时区时就内存不足,是cloneRect超出原图范围,</span>
<span style="font-family: Arial, Helvetica, sans-serif;">//我猜原因是pictureBo里的图片被剪后就变成了被剪后的图,是360*180的图了不再是720*180,所以超出范围了,不知道怎么改才行就改成直接从文件夹导入了</span>
<span style="font-family:Arial, Helvetica, sans-serif;">//如果依然用从pictureBox里导入的话改怎么改,希望知道的朋友指导下 </span> RectangleF cloneRect = new RectangleF(180+X, 0, 360, 170);//从0+X处开始剪裁360*180的图 System.Drawing.Imaging.PixelFormat format =myBitmap.PixelFormat;//获取myBitmap的PixelFormat,记为format //MessageBox.Show(X.ToString());//测试format符合要求 Bitmap cloneBitmap = myBitmap.Clone(cloneRect, format);//复制cloneRect所表示矩形框内的图,常提示内存不足 this.pictureBox_map.SizeMode = PictureBoxSizeMode.CenterImage;//设置显示模式 this.pictureBox_map.Image = Image.FromHbitmap(cloneBitmap.GetHbitmap()); //this.pictureBox_map.SizeMode = PictureBoxSizeMode.CenterImage;//设置显示模式 myBitmap.Dispose(); cloneBitmap.Dispose(); }
在选择时区后调用
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)//comboBox选择时区时 { label_tz.Text = comboBox.Text;//tab1页面下显示所选时区 button_OK.Focus(); for (i = 0; i < 49; i++)//找出所选timezone对应的offset { if (timezone[i] == comboBox.Text) { s = offset[i]; int screenOffset = int.Parse(s); int screenOffsetX = screenOffset / 4; // MessageBox.Show(screenOffsetX.ToString());//检测screenOffsetX的值是否和我手动计算的一致,可忽略 Clone_map(screenOffsetX); break; } }
//记录时区名的数组 string[] timezone ={"(GMT -12:00) Eniwetok, Kwajalein","(GMT -11:00) Midway Island, Samoa", "(GMT -10:00) Hawaii","(GMT -09:00) Alaska", "(GMT -08:00) Pacific Time (US and Canada); Tijuana:","(GMT -07:00) Arizona", "(GMT -07:00) Mountain Time (US and Canada)","(GMT -06:00) Central Time (US and Canada)", "(GMT -06:00) Mexico City, Tegucigalp","(GMT -06:00) Saskatchewan", "(GMT -05:00) Bogota, Lima","(GMT -05:00) Eastern Time (US and Canada)", "(GMT -05:00) Indiana (East)","(GMT -04:00) Atlantic Time (Canada)", "(GMT -04:00) Caracas, La Paz","(GMT -03:30) Newfoundland", "(GMT -03:00) Brasilia","(GMT -03:00) Buenos Aires, Georgetown", "(GMT -02:00) Mid-Atlantic","(GMT -01:00) Azores, Cape Verde Is.", "(GMT +00:00) Greenwich Mean Time; Dublin, Edinburgh, London, Lisbon","(GMT +00:00) Monrovia, Casablanca", "(GMT +01:00) Berlin, Stockhold, Rome, Bern, Brussels, Vienna","(GMT +01:00) Paris, Madrid, Amsterdam", "(GMT +01:00) Prage, Warsaw, Budapest","(GMT +02:00) Athens, Helsinki, Istanbul", "(GMT +02:00) Cairo","(GMT +02:00) Eastern Europe","(GMT +02:00) Harare, Pretoria", "(GMT +02:00) Israel","(GMT +03:00) Baghdad, Kuwait, Nairobi, Riyadh", "(GMT +03:00) Moscow, St. Petersburgh, Kazan, Volgograd","(GMT +03:00) Tehran", "(GMT +04:00) Abu Dhabi, Muscat, Tbilisi","(GMT +04:30) Kabul", "(GMT +05:00) Islamabad, Karachi, Ekaterinburg, Tashkent", "(GMT +05:30) Bombay, Calcutta, Madras, New Delhi, Colombo","(GMT +06:00) Almaty, Dhaka", "(GMT +07:00) Bangkok, Jakarta, Hanoi","(GMT +08:00) Beijing, Chongqing, Urumqi", "(GMT +08:00) Hong Kong, Perth, Singapore, Taipei","(GMT +09:00) Tokyo, Osaka, Sapporo, Seoul, Yakutsk", "(GMT +09:30) Adelaide","(GMT +09:30) Darwin","(GMT +10:00) Brisbane, Melbourne, Sydney", "(GMT +10:00) Guam, Port Moresby, Vladivostok","(GMT +10:00) Hobart", "(GMT +11:00) Magadan, Solomon Is., New Caledonia","(GMT +12:00) Fiji, Kamchatka, Marshall Is.", "(GMT +12:00) Wellington, Auckland"}; //记录offset的数组,即时间差,单位minutes string[] offset = {"-720","-660","-600","-540","-480","-420","-420","-360", "-360","-360","-300","-300","-300","-240","-240","-210", "-180","-180","-120","-060","+000","+000","+060","+060", "+060","+120","+120","+120","+120","+120","+180","+180", "+180","+240","+270","+300","+330","+360","+420","+480", "+480","+540","+570","+570","+600","+600","+600","+660", "+720","+720" }; int i;//用于记录是第几项 string s;//用于记录时区所对应的offset
相关文章推荐
- C#生成灰度图片:拖动图片到picturebox显示,拖动picturebox图片到资源管理器 (Drag & drop )
- C#SoapFormatter序列化一例:将图片读写入xml文件,并能根据需要在PictureBox中按比例缩小显示
- 当鼠标移动到图片上时跟随鼠标显示放大的图片效果
- c#get网页图片并显示在picturebox上
- JQuery实现鼠标移动到图片上显示边框效果
- c#中pictureBox显示图片文件无法删除
- c#实现显示图片的动态效果
- C# 保存PictureBox中的图片到数据库,并从数据库读取图片显示到PictrueBox,解决报错 “无效参数”
- c# winform 读取oracle中blob字段的图片并且显示到pictureBox里,保存进库
- c#Winform程序,让pictureBox显示图像(包含GIF),并且不被占用,能即时删除图片。
- 郁闷了半天,原来是这个问题:关于C#中关于图片保存到数据库以及将数据库中的图片显示到PictureBox。
- 鼠标移动显示 div 图片 文字效果
- C#实现淡入淡出显示图像效果显示图片。
- 鼠标移动到图片上右边显示放大镜效果。
- C# 用二进制将图片保存在数据库里再读出来显示在pictureBox中
- C#SoapFormatter序列化一例:将图片读写入xml文件,并能根据需要在PictureBox中按比例缩小显示
- C# 两PictureBox图片交换(ImageLacation) 选中边框 外部图片可直接拖入到PictureBox中显示
- C#保存PictureBox或Bitmap图片为bmp|png|gif|jpg格式
- C#用LINQ to SQL把PictureBox中的图片存入数据库和取出数据库中的图片并显示在PictureBox中
- JQuery实现鼠标移动到图片上显示边框效果