C# 将int[]类型转换为int**

C# 将int[]类型转换为int**,c#,.net,image,C#,.net,Image,我在玩图像中的像素 我所拥有的: int w; // width int h; // height unsafe private int **pData; // pixel data 我想能够设置pData的高度和宽度。。。因此,类似于以下内容: pData = new int*[w]; for(int x = 0; x<w; x++) pData = new int*[h]; pData=newint*[w]; 对于(int x=0;x您不能以这种方式初始化缓冲区。

我在玩图像中的像素

我所拥有的:

int w; // width
int h; // height
unsafe private int **pData; // pixel data
我想能够设置pData的高度和宽度。。。因此,类似于以下内容:

 pData = new int*[w]; 

 for(int x = 0; x<w; x++)
    pData = new int*[h]; 
pData=newint*[w];

对于(int x=0;x您不能以这种方式初始化缓冲区。您可以这样做:

class MyImage
{
    Int32[] _Buffer;
    Int32* _Pointer;
    GCHandle _Handle;

    public MyImage() {
        _Buffer = new Int32[w * h];
        _Handle = GCHandle.Alloc(_Buffer, GCHandleType.Pinned);
        _Pointer = (Int32*)_Handle.AddrOfPinnedObject().ToPointer();
    }
}
但不要这样做,这将阻止GC完成它的工作。最好在每次访问缓冲区时使用它

图像 处理图像时,应使用Int32[],因为Int32[,]的速度较慢(请参阅msdn)。您只需通过以下方式创建和修改图像:

Int32[] buffer = new Int32[width * height];
访问:

buffer[x + (width * y)] ...

您不能以这种方式初始化缓冲区。您可以执行以下操作:

class MyImage
{
    Int32[] _Buffer;
    Int32* _Pointer;
    GCHandle _Handle;

    public MyImage() {
        _Buffer = new Int32[w * h];
        _Handle = GCHandle.Alloc(_Buffer, GCHandleType.Pinned);
        _Pointer = (Int32*)_Handle.AddrOfPinnedObject().ToPointer();
    }
}
但不要这样做,这将阻止GC完成它的工作。最好在每次访问缓冲区时使用它

图像 处理图像时,应使用Int32[],因为Int32[,]的速度较慢(请参阅msdn)。您只需通过以下方式创建和修改图像:

Int32[] buffer = new Int32[width * height];
访问:

buffer[x + (width * y)] ...

所以你只需要一个像素网格

在C#中,您可以只使用多维数组或数组数组,例如

private int[,] pixelData = new int[w, h];

// (Might have confused some variables here)
private int[][] pixelData = new int[w][];
for (int i = 0; i < w; i++) pixelData[i] = new int[h];
private int[,]pixelData=新int[w,h];
//(这里可能混淆了一些变量)
私有int[][]像素数据=新int[w][];
对于(int i=0;i
那么你只需要一个像素网格

在C#中,您可以只使用多维数组或数组数组,例如

private int[,] pixelData = new int[w, h];

// (Might have confused some variables here)
private int[][] pixelData = new int[w][];
for (int i = 0; i < w; i++) pixelData[i] = new int[h];
private int[,]pixelData=新int[w,h];
//(这里可能混淆了一些变量)
私有int[][]像素数据=新int[w][];
对于(int i=0;i
是的,我知道其中的区别……但我在.Net框架内使用C#……所以我把C#.Net…我不太明白你想做什么,但我很确定这里不需要使用指针……pdata会被传递到Pinvoke方法中吗?这就是你使用指针的原因吗?基本上,我正在创建自己的图像并设置我自己着色。然后我将其传递给saveimage方法。程序的要点是保存图像(不使用“image.save()”)这个特定方法的要点是设置大小…请使用这个url是的,我知道区别…但是我在.Net框架中使用C#…所以我使用C#.Net…我不太明白你想做什么,但是我非常确定这里不需要使用指针…pdata会被传递到Pinvoke方法中吗?这就是你为什么要这样做的原因吗'你在使用指针吗?基本上,我在创建自己的图像并自己设置颜色。然后我将其传递给saveimage方法。程序的要点是保存图像(不使用“image.save()”)这个具体方法的要点是设置大小…请用这个url回答问题,并给出明智的建议+1@AndrewBarber谢谢,我想我工作很多,因为我回答问题时没有看任何帮助或代码…希望它是正确的…回答了问题,并给出了明智的建议+1@AndrewBarber谢谢,我很瘦k我工作很多,因为我回答问题时没有看任何帮助或代码…希望它是正确的。。。