2

我需要将 int[] 转换为 byte[] 指针。为了能够逐像素填充 WriteableBitmap 的条目,需要执行上述操作,如下所示:

//previewBuffer1 is of type byte[]
WriteableBitmap wb1 = new WriteableBitmap(nVidWidth, nVidHeight);
int k=0;
// wb1.Pixels is of type int[] by default
byte* data = (byte*) wb1.Pixels;  // ****THIS DOESN'T WORK. THROWS ERROR. HOW CAN I ACCOMPLISH THIS***
for (int i=0; i<nVidHeight; i++){
    for (int j=0; j<nVidWidth; j++){
        byte grayscaleval = previewBuffer1[k];
        data [4*k] = grayscaleval ;
        data [4*k + 1] = grayscaleval ;
        data [4*k + 2] = grayscaleval ;
        k++;
    }
}

如何获得 wb1.Pixels 的字节 * 指针,其类型为 int[]?

4

4 回答 4

3

听起来您想将int数组中的每个都视为字节序列 - 怎么样 BitConverter.GetBytes

byte[] bytes = BitConverter.GetBytes(intValue);

如果您想避免数组复制等,请使用unsafe允许指针(您需要在项目属性中勾选“允许不安全代码”复选框):

unsafe static void UnsafeConvert(int value)
{
    byte* bytes = (byte*)&value;
    byte first = bytes[0];
    ...
}
于 2013-07-18T05:21:51.160 回答
1

我对你的循环感到困惑,因为我认为它有一些问题......但看起来你正试图去除 RGBA 数据的 alpha 分量。为什么不做类似的事情:

假设您有: 1. 一个字节 [] 您想要存储没有 Alpha 分量的 RGB 数据 2. 一个 int [] RGBA 数据源

int offset=0; // offset into the 'dest' array of bytes

for (...) // loop through your source array of ints 
{
    // get this current int value as rgba_val
    int rgba_val = (whatever your RGBA source is..is it wb1.Pixels?)

    dest[offset] = (rgba_val & 0xff) >> 24;
    dest[offset+1] = (rgba_val & 0x00ff) >> 16;
    dest[offset+2] = (rgba_val & 0x0000ff) >> 8;
}
于 2013-07-18T05:00:35.847 回答
1

我想以下内容对我有用:

//previewBuffer1 is of type byte[]
WriteableBitmap wb1 = new WriteableBitmap(nVidWidth, nVidHeight);
int k=0;
// wb1.Pixels is of type int[] by default
//byte* data = (byte*) wb1.Pixels;  // ****NOT REQUIRED ANYMORE***
for (int i=0; i<nVidHeight; i++){
    for (int j=0; j<nVidWidth; j++){
        int grayscaleval = (int) previewBuffer1[k];
        wb1.Pixels[k] = ((grayscaleval) | (grayscaleval<<8) | (grayscaleval<<16) | (0xFF<<24)); // 0xFF is for alpha blending value

        k++;
    }
}

至少在逻辑上似乎没问题。还是要试一试。

于 2013-07-18T05:26:08.990 回答
0

使用它将您的 int 数组转换为字节数组

WriteableBitmap wb1 = new WriteableBitmap(100, 100);
int[] pixels = wb1.Pixels;
byte[] data = new byte[pixels.Length];
for (int i= 0; i < pixels.Length;i ++)
{
    data[i] = (byte)pixels[i];
}
于 2013-07-18T05:11:44.233 回答