gpt4 book ai didi

c# - BMP 中的字节到位获取 RGB

转载 作者:行者123 更新时间:2023-11-30 22:30:15 27 4
gpt4 key购买 nike

我写了下面的代码来操纵图像的颜色。我想以某种方式撕开图像的每个像素。所以对于每个像素,我想访问 5 位红色、6 位绿色和 5 位蓝色(根据 16 位图像)。我将如何更改我的代码来执行此操作?我想我必须以某种方式将我设置的那些字节值转换为位?

任何帮助都会很棒。

        private Bitmap InvertBitmap(Bitmap bmp)
{

unsafe
{
//create an empty bitmap the same size as original
Bitmap newBitmap = new Bitmap(bmp.Width, bmp.Height);

//lock the original bitmap in memory
System.Drawing.Imaging.BitmapData originalData = bmp.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

//lock the new bitmap in memory
System.Drawing.Imaging.BitmapData newData = newBitmap.LockBits(
new Rectangle(0, 0, bmp.Width, bmp.Height),
System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

//set the number of bytes per pixel
int pixelSize = 3;

for (int y = 0; y < bmp.Height; y++)
{
//get the data from the original image
byte* originalImageRow = (byte*)originalData.Scan0 + (y * originalData.Stride);

//get the data from the new image
byte* newImageRow = (byte*)newData.Scan0 + (y * newData.Stride);

for (int x = 0; x < bmp.Width; x++)
{

//set the new image's pixel to the inverted version

newImageRow[x * pixelSize] = (byte)(255 - originalImageRow[x * pixelSize + 0]); //B
newImageRow[x * pixelSize + 1] = (byte)(255 - originalImageRow[x * pixelSize + 1]); //G
newImageRow[x * pixelSize + 2] = (byte)(255 - originalImageRow[x * pixelSize + 2]); //R
}
}

//unlock the bitmaps
newBitmap.UnlockBits(newData);
bmp.UnlockBits(originalData);

return newBitmap;
}
}

最佳答案

如果您有一个 16 位整数 x,您可以提取其中的位范围,方法是首先使用二进制 AND 屏蔽这些位,然后移动结果。像这样:

int x = 33808;  // 1000010000010000, for testing

int r = (x & 63488) >> 11; // 63488 = 1111100000000000
int g = (x & 2016) >> 5; // 2016 = 0000011111100000
int b = (x & 31); // 31 = 0000000000011111

// r = 10000
// g = 100000
// b = 10000

希望对您有所帮助。

关于c# - BMP 中的字节到位获取 RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746130/

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