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我工作很多,因为我回答问题时没有看任何帮助或代码…希望它是正确的。。。