比方说,我有一个字节数组,包含没有标题的原始位图数据。
但是位图数据有点奇怪,我不太确定,但是如果宽度是NPOT(不是二次方),位图数据似乎没有正确对齐
我使用以下代码从此类位图数据构造bmp:
public Bitmap GetBitmap(byte[] bitmapData, int width, int height)
{
Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format16bppRgb555);
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bmpData = bitmap.LockBits(rect, ImageLockMode.ReadWrite, bitmap.PixelFormat);
unsafe
{
byte* ptr = (byte*)bmpData.Scan0;
for (int i = 0; i < bitmapData.Length; i++)
{
*ptr = bitmapData[i];
ptr++;
if (width % 2 != 0)
{
if ((i + 1) % (width * 2) == 0 && (i + 1) * 2 % width < width - 1)
{
ptr += 2;
}
}
}
}
bitmap.UnlockBits(bmpData);
return bitmap;
}
到目前为止,代码运行良好。但由于某些原因,我需要实现“导入位图”,这意味着我需要从位图实例中获取“奇怪”的位图数据。
我该怎么做?
最后,我想出了如何做到这一点。
我决定首先通过Marshal将数据复制到字节数组中。复制
,然后将其复制到另一个字节数组,如果宽度为NPOT,则跳过某个点:
public byte[] ImportBitmap(Bitmap bitmap)
{
int width = bitmap.Width, height = bitmap.Height;
var bmpArea = new Rectangle(0, 0, width, height);
var bmpData = bitmap.LockBits(bmpArea, ImageLockMode.ReadWrite, PixelFormat.Format16bppRgb555);
var data = new byte[bmpData.Stride * Height];
Marshal.Copy(bmpData.Scan0, data, 0, data.Length);
bitmap.UnlockBits(bmpData);
bitmap.Dispose(); // bitmap is no longer required
var destination = new List<byte>();
int leapPoint = width * 2;
for (int i = 0; i < data.Length; i++)
{
if (width % 2 != 0)
{
// Skip at some point
if (i == leapPoint)
{
// Skip 2 bytes since it's 16 bit pixel
i += 1;
leapPoint += (width * 2) + 2;
continue;
}
}
destination.Add(data[i]);
}
return destination.ToArray();
}
我正在使用ADB拍摄android设备的屏幕截图,并将屏幕截图作为原始字节数据接收。 我知道通过的原始字节数据是rgba格式的 红色偏移量为0,绿色偏移量为8,蓝色偏移量为16,Alpha偏移量为24,每个值为1字节。这构成了整个字节数组。 我正在尝试将这个字节数组转换为C#中的位图,它在大多数情况下都工作正常,图像在各个方面看起来都是正确的,除了它带有一个“蓝色色调”——颜色是关闭的。 以下是我
问题内容: 当我对字节的调用全部为0 后查看缓冲区时,从相机返回的位图是不可变的……但这无关紧要,因为它正在执行复制操作。 此代码可能有什么问题? 问题答案: 尝试这样:
问题内容: 我有以下字节片,我需要从中提取位并将它们放置在[] int中,因为我打算稍后再获取各个位值。我很难弄清楚该怎么做。 下面是我的代码 我需要的是一点点-> 我试过了 我尝试使用BigEndian将字节片转换为Uint16,然后尝试使用,但由于错误而失败 看到了很多示例,这些示例使用函数来简单地输出数字的位表示形式,但这对我没有用,因为我需要一个int切片来进一步访问位值。 我需要在这里使
我有一段代码,可以使用ImageIO将字节数组转换为BuffereImage。 但我发现,对于某些jpeg图像,每次都会抛出CMM异常。 这是堆栈跟踪: 我在Google上搜索了一个解决方案,发现了一个帖子承认了这个问题,并建议在ImageIO失败的情况下使用JAI。但我有疑问,因为这篇帖子是4年前的,我似乎找不到太多关于JAI的信息,这让我相信这不是理想的解决方案。有没有其他方法可以在没有Ima
问题内容: 通过这种方式获得字节数组- 现在我如何从字节数组重建此灰度图像? 我对ARGB,RGB或灰度图像了解不多。我试过了- 当我绘制此图像时,它不是黑白的,而是橙色和灰色的东西。 问题答案: 如果我向您解释如何从ARGB / RGB 2灰度转换,希望对您有所帮助,因为它有太多未知的函数和类:P ARGB为32位/像素,因此每个通道为8位。Alpha通道是不透明度,因此与透明度相反,因此0是透
问题内容: 我想将多维字节数组保存到SQL Server数据库。 我知道如何保存一个字节数组,这是图像到数据库的转换。为此,我使用的数据类型是。但是现在我想存储另一个字节数组,它是多维字节数组,它具有带有x,y值的二维。 我在互联网上搜索过,在这里,据说是使用格式。我只想知道是否将多维数组保存在数据类型数据列中,这些值会被更改吗?是否可以再次将数据接收为多维数组? 问题答案: 是的,您将能够不更改