有没有一种方法可以快速将jpeg的大小调整为.NET中原始大小的1/8?

有没有一种方法可以快速将jpeg的大小调整为.NET中原始大小的1/8?,.net,algorithm,image-processing,jpeg,.net,Algorithm,Image Processing,Jpeg,希望损失尽可能少,因为我听过一个叫Guido Vollbeding的家伙提出的实现。标准GDI+似乎没有这种功能,到目前为止,我所发现的不是规范就是完全集成的工具。一个精简的、可插拔的.NET组件是非常理想的。如果是我自己实现的,常见的陷阱是什么 感谢您的每一个想法和指导 编辑:我的目标是绕过解压缩到.NET位图的明显循环,在那里调整大小,然后再次压缩。这似乎指向了正确的方向,但到目前为止,我从未见过任何.NET实现使用.NET位图类非常简单: void ResizeImage(string i

希望损失尽可能少,因为我听过一个叫Guido Vollbeding的家伙提出的实现。标准GDI+似乎没有这种功能,到目前为止,我所发现的不是规范就是完全集成的工具。一个精简的、可插拔的.NET组件是非常理想的。如果是我自己实现的,常见的陷阱是什么

感谢您的每一个想法和指导


编辑:我的目标是绕过解压缩到.NET位图的明显循环,在那里调整大小,然后再次压缩。这似乎指向了正确的方向,但到目前为止,我从未见过任何.NET实现

使用.NET位图类非常简单:

void ResizeImage(string inFname, string outFname, float scale)
{
    Bitmap bmpOrig = new Bitmap(inFname);
    int w = (int)(scale * bmpOrig.Width);
    int h = (int)(scale * bmpOrig.Height);
    Bitmap bmpNew = new Bitmap(bmpOrig, new Size(w, h));
    bmpNew.Save(outFname, ImageFormat.Jpeg);
}
您需要添加对System.Drawing的引用,并在代码中同时使用System.Drawing和System.Drawing.Imaging:


我不能说会有多少损失。

我不知道有任何算法专门处理1/(2^n),但如果你能找到一个,你需要能够锁定位图上的位(如果你想要任何合理的速度)。使用设置/获取像素是一个糟糕的主意


< P>将它加载到内存中,作为位图,然后获取其数据并使用不安全代码,就像C++一样编写大小调整代码。这是我学习如何快速调整图像大小的地方(我不认为link可以调整图像大小,但它向您展示了如何在.Net中编写快速图像代码)


在“反汇编”窗口中设置断点并单步执行代码将告诉您正在做什么。避免任何数组访问,只需使用指针,数组访问对.Net中的紧密性能循环来说是致命一击(因为有一个检查索引是否在界限内,然后有一个条件跳转来为每个.Single.access抛出一个异常。)

我一直在使用它来进行一般的简单调整大小。我的问题是,在特殊情况下,如果一个更好的算法可以利用1/2、1/4、1/8的缩小比例,那么就加快速度。