如何将大小为 19200 字节的字节数组(每个字节代表 4 个像素(每个像素 2 位))转换为按 320x240 字符排列的位图
我正在与仪器通信(远程控制它)并且
我需要做的事情之一是绘制仪器屏幕。
为了获得屏幕,我发出命令和仪器
使用代表屏幕的字节数组进行回复。
以下是仪器手册有关将响应转换为实际屏幕的说明:
该命令检索用于显示的帧缓冲区数据。
它的大小为 19200 字节,每像素 2 位,每字节 4 像素排列为
320x240 字符。
数据以 RLE 编码形式发送。
要将这些数据转换为 BMP 以在 Windows 中使用,需要
变成了4BPP。另请注意,BMP 文件是相对颠倒的
对于此数据,即顶部显示行是 BMP 中的最后一行。
我设法解压数据,但现在我不知道如何实际
从解压的字节数组转换为位图。
我对此的背景几乎为零,我的搜索
也没有透露太多。
我正在寻找可以帮助我的方向和/或文章
了解如何完成这项工作。
任何代码甚至伪代码也会有帮助。 :-)
所以,总结一下:
如何转换大小为19200字节的字节数组,其中
每个字节代表 4 个像素(每个像素 2 位),
排列为 320x240 字符的位图。
提前致谢。
I am communicating with an instrument (remote controlling it) and
one of the things I need to do is to draw the instrument screen.
In order to get the screen I issue a command and the instrument
replies with an array of bytes that represents the screen.
Below is what the instrument manual has to say about converting the response to the actual screen:
The command retrieves the framebuffer data used for the display.
It is 19200 bytes in size, 2-bits per pixel, 4 pixels per byte arranged as
320x240 characteres.
The data is sent in RLE encoded form.
To convert this data into a BMP for use in Windows, it needs to be
turned into a 4BPP. Also note that BMP files are upside down relative
to this data, i.e. the top display line is the last line in the BMP.
I managed to unpack the data, but now I am stuck on how to actually
go from the unpacked byte array to a bitmap.
My background on this is pretty close to zero and my searches
have not revealed much either.
I am looking for directions and/or articles I could use to help me
undestand how to get this done.
Any code or even pseudo code would also help. :-)
So, just to summarize it all:
How to convert a byte array of 19200 bytes in size, where
each byte represents 4 pixels (2 bits per pixel),
to a bitmap arranged as 320x240 characters.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
要执行这样的操作,您需要这样的例程:
从这里开始,您需要 ReadPixelValue 和 ConvertValToColor。
基本上,我从每个字节中取出每组两位并将其作为 int 返回。
至于转换为颜色,这取决于您如何使返回的 4 个值成为头部或尾部。
您很可能可以这样做:
To do something like this, you'll want a routine like this:
from here, you need ReadPixelValue and ConvertValToColor.
Basically, I pull each set of two bits out of each byte and return it as an int.
As for converting to color that's up to you how to make heads or tail of the 4 values that come back.
Most likely you can do something like this:
如果每个像素有两位,则每个像素有 4 种不同的可能颜色。颜色可能已索引或只是硬编码(即 0 表示黑色,1 表示白色等)。
不知道这是否有很大帮助(我不知道您正在使用什么位图对象,但也许它有一个常规的 RGB 或 ARGB 方案,每个通道 1 个字节),但在伪动作脚本中,我认为您应该做这样的事情。
可以说,上面的代码只是为了给您一个想法(希望如此!),并且基于一些假设,例如这四个像素如何存储在一个字节中。
希望这是有道理的。
If you have two bits per pixel, for each pixel you have 4 different possible colors. Probably the colors are indexed or just hardcoded (i.e. 0 means black, 1 white, etc).
Don't know if this is of much help ( I don't know what bitmap object you are using, but perhaps it has a regular RGB or ARGB scheme with 1 byte per channel), but in pseudo-actionscript, I think you should do something like this.
The above code, suffice it to say, is just to give you an idea (hopefully!) and is based on some assumptions like how these four pixels are stored in a byte.
Hope it makes sense.
我不知道这是否有帮助,我将其用于从罕见的旧硬件获得的数据:
I dont know if this helps, I use this for data I got from a rare old hardware: