.NET C#-位图和图像都加载比预期更小的图像
本文关键字:图像 加载 C#- 位图 NET | 更新日期: 2023-09-27 18:26:13
我正在尝试处理来自现代相机的典型1600万像素图像。选择一个随机的图像,文件系统和我的图像编辑软件都说图像是4608 x 3456。当我使用新位图(filename)或image.FromFile(filename)在C#(VS2013.Net 4.5)中加载图像时,我会成功加载图像。但是,生成的图像的大小为1613 x 1210。现在,在某些情况下,我想创建自定义大小的缩略图,这将正常工作。然而,我还有另一个需要,我检测到"非正常"方向,我只想翻转/旋转显示,然后保存。
保存这些图像(不需要任何调整,只需加载和保存)会在磁盘上创建一个有效的图像。然而,文件系统和我的图像工具都显示尺寸为1613 x 1210。
如何加载全尺寸图像并将所有信息保留回磁盘?你知道我做错了什么吗?我只想在需要的地方旋转图像,我不想缩小它!
下面是我尝试的一个片段,正如下面评论中所承诺的那样:
Bitmap bm = new Bitmap(fileName);
Image jpg = Image.FromFile(fileName);
jpg.Save("e:''test.jpg");
bm.Save("e:''test2.jpg");
这两个文件都小于其原始大小,并且与调试器为两个内存中映像显示的宽度和高度相匹配。
根据建议的答案,我尝试了这个代码,但没有看到结果的差异:
long width = 0;
long height = 0;
byte[] imageBytes = File.ReadAllBytes(fileName);
using (MemoryStream ms = new MemoryStream(imageBytes))
{
Image jpg3 = Image.FromStream(ms);
width = jpg3.Width;
height = jpg3.Height;
jpg3.Save("e:''test3.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
}
提前谢谢。
[编辑]来自后续帖子的用户错误:
虽然这是真的,但我确实有一张4608x3456大小的照片正在尝试加载,我在OpenFileDialog中选择了错误的目录实际上,你猜对了,它被选为1613 x 1210版本的这张图片代码加载了全部内容,愚蠢的运算符(我)正在把它粘起来
在我发帖之前,我会尝试全尺寸的图片。。。是的,效果很好。
你能展示你的程序代码吗?我下载了5169x3423大小的样本图像。使用程序加载此图像,当我恢复它时,原始图像和新图像是相同的。
我将图像文件加载到字节数组中,并将其保存到位图中。
private Image LoadImage()
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.ShowDialog();
byte[] byteImage = File.ReadAllBytes(openFile.FileName);
Image myImage;
using (var ms = new MemoryStream(byteImage))
{
myImage = Image.FromStream(ms);
}
return myImage;
}
private void SaveImage(Image myImage)
{
Bitmap bmp = new Bitmap(myImage);
// Temp save location
bmp.Save("c:''test''myImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}