Arrays 从字节数组裁剪图像

Arrays 从字节数组裁剪图像,arrays,bitmap,Arrays,Bitmap,我有一个图像(这是一个精灵)。我将其存储在字节数组中。我只想提取与此字节数组中特定位置和大小相关的字节,以便创建新图像。基本上是一种作物。我使用c#和compact cf。我可以使用get pixel并将每个值保存到字节数组中,然后“读取”我感兴趣的部分。我知道我可以使用lockbitmap来加快速度。我通常会使用RGE和/或Emgu,但正如我所说,我使用的是compact cf framework 2 我对任何已知的方法都感兴趣 谢谢 附加。 在下面的链接中,我想知道对于这段迭代代码是否有替代

我有一个图像(这是一个精灵)。我将其存储在字节数组中。我只想提取与此字节数组中特定位置和大小相关的字节,以便创建新图像。基本上是一种作物。我使用c#和compact cf。我可以使用get pixel并将每个值保存到字节数组中,然后“读取”我感兴趣的部分。我知道我可以使用lockbitmap来加快速度。我通常会使用RGE和/或Emgu,但正如我所说,我使用的是compact cf framework 2

我对任何已知的方法都感兴趣

谢谢

附加。 在下面的链接中,我想知道对于这段迭代代码是否有替代方案(比如缓冲区副本)

//Iterate the selected area of the original image, and the full area of the new image
for (int i = 0; i < height; i++)
{
    for (int j = 0; j < width * BPP; j += BPP)
    {
        int origIndex = (startX * rawOriginal.Stride) + (i * rawOriginal.Stride) + (startY * BPP) + (j);
        int croppedIndex = (i * width * BPP) + (j);

        //copy data: once for each channel
        for (int k = 0; k < BPP; k++)
        {
            croppedBytes[croppedIndex + k] = origBytes[origIndex + k];
        }
    }
}
//迭代原始图像的选定区域和新图像的整个区域
对于(int i=0;i
我还有一些链接给你

尝试一下,如果你找到了解决方案,或者它对你有任何帮助

(一)


2) 我知道这是一个老问题,但我的看法是:

public static byte[] CropImageArray(byte[] pixels, int sourceWidth, int bitsPerPixel, Int32Rect rect)
{
    var blockSize = bitsPerPixel / 8;
    var outputPixels = new byte[rect.Width * rect.Height * blockSize];

    //Create the array of bytes.
    for (var line = 0; line <= rect.Height - 1; line++)
    {
        var sourceIndex = ((rect.Y + line) * sourceWidth + rect.X) * blockSize;
        var destinationIndex = line * rect.Width * blockSize;

        Array.Copy(pixels, sourceIndex, outputPixels, destinationIndex, rect.Width * blockSize);
    }

    return outputPixels;
}
publicstaticbyte[]CropImageArray(byte[]pixels,intsourcewidth,intbitsperpixel,Int32Rect)
{
var blockSize=bitsPerPixel/8;
var outputPixels=新字节[rect.Width*rect.Height*blockSize];
//创建字节数组。

对于(var line=0;line@Vaibs_Cool嗨,谢谢你的链接。我昨晚确实看了,但返回的图像是黑白的。我在像素格式上乱搞了一下,但出现了一个错误,说是只读。显然昨晚很累,因为我只是简单地复制粘贴了一下,效果很好。所以,我想我有点笨。你应该得到一个t单击“因为你让我重新查看它。感谢你提供的附加链接。我以前查看过这些链接,但我需要直接处理字节数据。原因是我使用的是一个非常大的精灵,它会在移动设备上给我一个内存不足异常。因此,流程是我的服务器上有一个大映像。它被发送到t将设备作为字节数组。然后,我动态提取我想要的图像。嗨,我使用了1455x352的图像,并尝试提取一个873,0291172的矩形,但我在这一行得到“索引超出范围”异常:crappedBytes[crappedIndex+k]=origBytes[origIndex+k];