不使用.NET库进行C#图像裁剪

5
有人能指导如何裁剪图片,假设是jpeg格式的,而不使用任何.NET框架构造,只使用原始字节?由于这是Silverlight中唯一的*方法...或者指出一个库?
我不关心渲染,我想在上传之前操纵jpg。
*在Silverlight中没有可用的GDI+(System.Drawing)或WPF(System.Windows.Media.Imaging)库。
Lockbits需要GDI+,澄清问题。
使用fjcore:http://code.google.com/p/fjcore/ 调整大小但没有办法裁剪:(
4个回答

3
您可以在fjcore中轻松地编写裁剪程序。从Resizer的代码开始。(点击此处查看)和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;
}

这段文字告诉你数据存储在颜色平面的数组中(8bpp灰度图像为1个元素,彩色图像为3个元素),每个元素都有一个二维字节数组(x, y)用于图像。

你只需要循环遍历目标像素,从源图像的适当位置复制它们即可。

编辑:别忘了向fjcore作者提供补丁。


2
"

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

(说真的吗?在 Silverlight 中操纵图像的推荐方法是使用原始字节?那太糟糕了。)

"

2

0

silverlight 是在哪里执行的? 有没有任何理由将完整的图片发送给客户端让客户端进行裁剪? 这应该在服务器上完成...(除非你正在创建一个图像编辑器..)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接