5

谁能建议如何裁剪图像,比如说 jpeg,而不使用任何 .NET 框架结构,只使用原始字节?因为这是 Silverlight 中唯一的*方式...

或者指向图书馆?

我不关心渲染我想在上传之前操纵 jpg。

* Silverlight 中没有可用的 GDI+(System.Drawing) 或 WPF(System.Windows.Media.Imaging) 库。

Lockbits 需要 GDI+,澄清问题

使用 fjcore:http ://code.google.com/p/fjcore/调整大小但无法裁剪:(

4

4 回答 4

3

您可以在 fjcore 中轻松编写自己的裁剪。从 Resizer 的代码开始

http://web.archive.org/web/20140304090029/http://code.google.com:80/p/fjcore/source/browse/trunk/FJCore/Resize/ImageResizer.cs?

和 FilterNNResize——你可以看到图像数据是如何存储的——它只是简单的像素数组。

重要的部分是:

for (int y = 0; y < _newHeight; y++)
{
    i_sY = (int)sY; sX = 0;

    UpdateProgress((double)y / _newHeight);

    for (int x = 0; x < _newWidth; x++)
    {
        i_sX = (int)sX;

        _destinationData[0][x, y] = _sourceData[0][i_sX, i_sY];

        if (_color) {

            _destinationData[1][x, y] = _sourceData[1][i_sX, i_sY];
            _destinationData[2][x, y] = _sourceData[2][i_sX, i_sY];
        }

        sX += xStep;
    }
    sY += yStep;
}

向您展示了数据存储在一个颜色平面数组中(1 个元素用于 8bpp 灰色,3 个元素用于颜色),并且每个元素都有一个用于图像的二维字节数组(x,y)。

您只需要遍历目标像素,然后从源中的适当位置复制。

编辑:别忘了把补丁提供给 fjcore 的作者

于 2008-09-18T22:31:43.063 回答
2

ImageMagick做得很好。如果您可以将编辑任务交给您的服务器...

(说真的?在 Silverlight 中处理图像的推荐方法是使用原始字节?那是......非常糟糕。)

于 2008-08-31T19:44:03.477 回答
2

我正在查看:http ://code.google.com/p/fjcore/source/checkout 一个无依赖的图像处理库。

于 2008-09-02T21:28:32.930 回答
0

silverlight 在哪里执行?是否有任何理由向客户发送完整的图片以使客户对其进行裁剪?在服务器上执行...(如果您没有创建图像编辑器...)

于 2008-08-31T20:21:58.597 回答