.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版本的这张图片代码加载了全部内容,愚蠢的运算符(我)正在把它粘起来

在我发帖之前,我会尝试全尺寸的图片。。。是的,效果很好。

.NET C#-位图和图像都加载比预期更小的图像

你能展示你的程序代码吗?我下载了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);
}