2

希望尽可能少的损失,因为我听说过一个名叫 Guido Vollbeding 的人提出的实现。标准 GDI+ 似乎没有这种能力,到目前为止我发现的只是规范或完全集成的工具。一个精简的、可插拔的 .NET 组件将是非常可取的。如果我自己实现它,常见的陷阱是什么?

感谢每一个想法和指导!

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

4

3 回答 3

2

这很容易使用 .NET Bitmap 类:

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:

我不能说那会有多少损失。

于 2009-01-22T04:50:17.753 回答
0

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

可点击

于 2009-01-22T05:17:44.703 回答
0

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

在“反汇编”窗口中设置断点并单步执行代码会告诉你你在做什么。避免任何数组访问,只使用指针,数组访问是 .Net 中紧密性能循环的死亡之吻(因为检查索引是否在边界内,然后有条件跳转以抛出 Every.Single 。 使用权。)

于 2011-05-11T19:40:07.127 回答