您的位置:首页 > 编程语言 > C#

C#Bitmap裁剪图片后显示在pictureBox内,形成图片移动效果

2015-01-06 12:38 459 查看
用户界面大作业,选择时区时将地图上该时区显示在图片中间。

就是这样,地图是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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐