图像不转换为位图
Image does not convert to Bitmap
我目前遇到无法将图像转换为位图的问题。
这是有问题的代码:
private void btnPicture_Click(object sender, EventArgs e)
{
OpenFileDialog opFile = new OpenFileDialog();
opFile.Title = "Choose a picture!";
opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
if (Directory.Exists(appPath) == false)
{
Directory.CreateDirectory(appPath);
}
if (opFile.ShowDialog() == DialogResult.OK)
{
try
{
Character.imageName = opFile.SafeFileName;
Stream stream = opFile.OpenFile(); //<------ This is the line in question
Bitmap toResize = new Bitmap(stream);
Image characterImage = ResizeImage(toResize, 200, 306);
imgCharacter.Image = characterImage;
characterImage.Save("Images/" + Character.imageName);
}
catch (Exception exp)
{
MessageBox.Show("Please select a picture, exception code: " + exp.Message);
}
}
else
{
opFile.Dispose();
}
}
现在基本上这段代码适用于我尝试过的每一张图片,除了 1。我的朋友试图上传的一张图片会崩溃并出现以下错误:参数无效。
我尝试过的:
- 首先,这位朋友把有问题的图片发给我。我下载了它并遇到了同样的问题。
- 然后我让朋友给我发了其他在他的机器上工作的图像,这些图像仍然有效。
- 接下来,我在Paint中打开有问题的图片,"saved as"将图片放到任意文件夹,然后就可以了。在此过程中,我收到一条警告,以这种方式保存图像可能会导致 t运行sparency loss。
- 为了检查 t运行sparency 是否是问题所在,我从互联网上下载了一张 "transparent" 图片来检查是否是问题所在 - 图片会正确加载。
- 最后,我在网上搜索了完全相同的图片,并尝试按照我朋友的方式下载,我没有得到错误。
- 为了确保图片没有损坏,我让朋友重新下载并发给我,还是会出现错误。
- 我 运行 调试器逐行查明崩溃的确切代码行。我不知道那里可能是什么原因。
Link转为图片:https://cdn.discordapp.com/attachments/413040202307731466/713873776143499294/babar1.jpg
我试图在网上寻求帮助,但找不到任何相关信息,所以我在这里,如果这张图片(或一组图片)有什么特别之处我不知道,请原谅,我是在任何方面、形状或形式上都不是图形设计师。
祝你有愉快的一天。
我在十六进制编辑器中查看了您提供的名为 "barbar1.jpg" 的图像,可以在开头看到 RIFF WEBPVP8 标记。这意味着图像不是 JPG 文件,而是 WEBP 文件。
https://en.wikipedia.org/wiki/WebP
您遇到的错误是在从流中初始化新位图时出现的。位图 class 仅支持 BMP、GIF、EXIF、JPG、PNG 和 TIFF。
Microsoft Paint 支持 WEBP,因此您可以打开并查看它。 Microsoft 和其他图像查看器忽略文件扩展名并根据文件数据本身的格式解析图像。这就是为什么您可以将文件重命名为 PNG、JPG、BMP 等,并且它仍然可以被 Paint 读取。
我目前遇到无法将图像转换为位图的问题。
这是有问题的代码:
private void btnPicture_Click(object sender, EventArgs e)
{
OpenFileDialog opFile = new OpenFileDialog();
opFile.Title = "Choose a picture!";
opFile.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*";
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
if (Directory.Exists(appPath) == false)
{
Directory.CreateDirectory(appPath);
}
if (opFile.ShowDialog() == DialogResult.OK)
{
try
{
Character.imageName = opFile.SafeFileName;
Stream stream = opFile.OpenFile(); //<------ This is the line in question
Bitmap toResize = new Bitmap(stream);
Image characterImage = ResizeImage(toResize, 200, 306);
imgCharacter.Image = characterImage;
characterImage.Save("Images/" + Character.imageName);
}
catch (Exception exp)
{
MessageBox.Show("Please select a picture, exception code: " + exp.Message);
}
}
else
{
opFile.Dispose();
}
}
现在基本上这段代码适用于我尝试过的每一张图片,除了 1。我的朋友试图上传的一张图片会崩溃并出现以下错误:参数无效。
我尝试过的:
- 首先,这位朋友把有问题的图片发给我。我下载了它并遇到了同样的问题。
- 然后我让朋友给我发了其他在他的机器上工作的图像,这些图像仍然有效。
- 接下来,我在Paint中打开有问题的图片,"saved as"将图片放到任意文件夹,然后就可以了。在此过程中,我收到一条警告,以这种方式保存图像可能会导致 t运行sparency loss。
- 为了检查 t运行sparency 是否是问题所在,我从互联网上下载了一张 "transparent" 图片来检查是否是问题所在 - 图片会正确加载。
- 最后,我在网上搜索了完全相同的图片,并尝试按照我朋友的方式下载,我没有得到错误。
- 为了确保图片没有损坏,我让朋友重新下载并发给我,还是会出现错误。
- 我 运行 调试器逐行查明崩溃的确切代码行。我不知道那里可能是什么原因。
Link转为图片:https://cdn.discordapp.com/attachments/413040202307731466/713873776143499294/babar1.jpg
我试图在网上寻求帮助,但找不到任何相关信息,所以我在这里,如果这张图片(或一组图片)有什么特别之处我不知道,请原谅,我是在任何方面、形状或形式上都不是图形设计师。
祝你有愉快的一天。
我在十六进制编辑器中查看了您提供的名为 "barbar1.jpg" 的图像,可以在开头看到 RIFF WEBPVP8 标记。这意味着图像不是 JPG 文件,而是 WEBP 文件。
https://en.wikipedia.org/wiki/WebP
您遇到的错误是在从流中初始化新位图时出现的。位图 class 仅支持 BMP、GIF、EXIF、JPG、PNG 和 TIFF。
Microsoft Paint 支持 WEBP,因此您可以打开并查看它。 Microsoft 和其他图像查看器忽略文件扩展名并根据文件数据本身的格式解析图像。这就是为什么您可以将文件重命名为 PNG、JPG、BMP 等,并且它仍然可以被 Paint 读取。