我有两个 IntPtr 到两个不同的浮动图像(source.IP 和destination.IP)。
我将一块像素从一个图像复制到另一个图像。
int j = 0;
for (int y0 = y; y0 < h + y; y0++)
{
float* s = ((float*)source.IP) + (y0 * sourcewidth) + x;
float* d = ((float*)destination.IP) + ((ydestination + j) * destinationwidth) + xdestination;
for (int i = 0; i < w; i++)
{
*d = *s;
s++;
d++;
}
j++;
}
上面的代码在一个不安全的块中运行。
问题是:如何在复制时固定图像数据,以使 GC 不会移动它?
如果我使用 GCHandle.Alloc(source) 我得到:ArgumentException: Object contains non-primitive or non-blittable data 错误。
编辑
使用不安全代码的原因是因为对图像数据的唯一访问是通过IntPtr source.IP,如果有其他方法可以复制数据我是开放的:)