c# - 如何在 C# Winform 应用程序中的表单之间传递裁剪的图片?
问题描述
我正在使用 C# Windows 窗体中的联系人管理器桌面应用程序,我目前正在尝试添加头像图像裁剪功能。图像正在从一种形式传递到另一种形式,没有任何问题。但是,无论我在做什么,裁剪后的图像都不会传回登录表单。我试图通过重载构造函数并在裁剪图像时创建一个新对象来更改登录表单中的图片。但是,我收到这样的错误:
System.ArgumentOutOfRangeException: „参数必须为正且 < 高度。(参数'y')”</p>
异常发生在“颜色 pxlColor”行上。
创建裁剪图像的裁剪方法:
private void button_Crop_Image_Click(object sender, EventArgs e)
{
Cursor = Cursors.Default;
Bitmap bitmap2 = new Bitmap(pictureBox1.Width, pictureBox1.Height);
pictureBox1.DrawToBitmap(bitmap2, pictureBox1.ClientRectangle);
Bitmap croppedImage = new Bitmap(rectW, rectH);
for (int x = 0; x < rectW; x++)
{
for (int y = 0; y < rectH; y++)
{
Color pxlColor = bitmap2.GetPixel(cropX + x, cropY + y);
croppedImage.SetPixel(x, y, pxlColor);
}
}
pictureBox2.Image = (Image)croppedImage;
Login_Register_Form login = new Login_Register_Form(croppedImage);
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
}
图像正确显示在 pictureBox2.Image 字段上。来自登录表单的构造函数:
public Login_Register_Form(Bitmap croppedImage)
{
this.croppedPicture = (Image)croppedImage;
pictureBoxProfileImage.Image = this.croppedPicture;
}
我已经对此进行了一些研究,发现上述错误可能是由于 Image 字段的大小不同造成的。在使它们的大小相等后,在“pictureBoxProfileImage.Image = this.croppedPicture;”上发生了 NullObjectReference 线。
System.NullReferenceException:“对象引用未设置为对象的实例。”</p>
我尝试同时传递 Bitmap 和 Image 变量,结果在两种情况下都是相似的。任何帮助将不胜感激。
干杯,菲利普
解决方案
我重新安排了一些事情,现在都以一种形式提交。裁剪后的图像正在替换最初发布的图像,该图像通过以下方法发布:
private void button_browse_Click(object sender, EventArgs e)
{
// select and display image in the picturebox
OpenFileDialog opf = new OpenFileDialog();
opf.Filter = "Select Image(*.jpg;*.png;*.gif)|*.jpg;*.png;*.gif";
if(opf.ShowDialog() == DialogResult.OK)
{
pictureBoxProfileImage.Image = Image.FromFile(opf.FileName);
setImage(pictureBoxProfileImage.Image);
}
}
问题是在保存图像以尝试使用以下功能进行注册时:
pictureBoxProfileImage.Image.Save(picture, pictureBoxProfileImage.Image.RawFormat);
图像为空,尽管显示正确。我应该以某种方式替换原始图像(覆盖)吗?
推荐阅读
- c# - 如何避免 ScriptableObject 数据结构更改时的数据丢失
- mysql - MySQL UNION 在 DataTables 中显示重复项
- twilio - 更改 Twilio Authy OTP 到期时间
- angular - Angular 组件中的 Emit 和 Catch 事件
- r - 将具有多个小数的数字字符串转换为R中的数字数据类型
- angular - Angular模板类绑定不一致
- asp.net-mvc - MVC 无需重定向即可登录 IdentityServer4
- javascript - Node.js dom-parser tagRegExp 正则表达式匹配挂起:灾难性回溯?
- php - 基于角色的访问控制究竟在哪里检查 MVC 模式中的用户权限?
- c# - 在 C# 中写入文本文件,但出现异常未处理错误