gpt4 book ai didi

c# - 位图到 int[] 使用 Marshal.Copy()

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:26 25 4
gpt4 key购买 nike

我正在使用 Marshal.Copy() 将像素信息从 Bitmap 复制到 int[] 数组,问题存在于进入这个数组的信息完全错误的事实,例如:

             [0] = -8682109; 
[1] = -8682109;
[2] = -8616573;
[3] = -8616573;
[4] = -8550527;
and so on...

该方法的代码是:

    private unsafe int[] BmpToBytes_Unsafe(Bitmap bmp)
{
BitmapData bData = bmp.LockBits(new Rectangle(new Point(), bmp.Size),
ImageLockMode.ReadOnly,
PixelFormat.Format32bppRgb);

// number of bytes in the bitmap
byteCount = bData.Stride * (bmp.Height);

int[] bytes = new int[byteCount / 4];

Marshal.Copy(bData.Scan0, bytes, 0, byteCount/4);

// don't forget to unlock the bitmap!!
bmp.UnlockBits(bData);

return bytes;

当我使用 byte[] 数组时,存储的信息是正确的,所以我不知道这里发生了什么。

最佳答案

这些值是完全正常的。它们是 32bpp 像素,alpha channel 为 0xff,这是通常的值。换句话说:-8682109 == 0xff7b8583。任何 >= 128 的 alpha 值都会使值变为负值,因为它设置了符号位。

使用 uint[] 而不是 int[] 可以使其更易于查看。

关于c# - 位图到 int[] 使用 Marshal.Copy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com