没有.net库的图像裁剪C#

时间:2020-03-05 18:45:43  来源:igfitidea点击:

谁能在不使用任何.NET框架构造而仅使用原始字节的情况下,就如何裁剪图像(例如jpeg)提出建议?由于这是Silverlight中的唯一*方式...

还是指向图书馆?

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

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

锁定位需要GDI +,已澄清问题

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

解决方案

回答

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

(严重吗?在Silverlight中处理图像的推荐方法是使用原始字节?那真是……太la脚了。)

回答

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

回答

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

回答

我们可以在fjcore中轻松编写自己的作物。从Resizer的代码开始

http://code.google.com/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的作者提供补丁