关于文字转图片后按点阵发送的问题?

火星大能猫 2010-05-09 12:14:15
客户端输入文字(文字大小48点),然后文字转换成图片按点阵发送到led屏。
有没有什么相关的资料给我参考参考啊。
需求如下:
4.16 发送图片
#PIC23,L,5,5#<本报文起始字节数2字节><2字节标识><图片数据...>
本报文起始字节数2字节:
表示本报文起始字节数(即前面已发送到字节数),因此图片每种颜色总长度最长为64KB

2字节标识:
高2位:
11表示本报文是红色或单色数据
10表示本报文是绿色数据
00表示本报文是图片描述报文,Unicode编码,文字长度应与图片长度换算成文字的长度一致,否则会被屏控卡截断或补充空格
最低位:
0表示本报文不是最后一个报文
1表示本报文是最后一个报文,收到此报文将写入字幕信息准备好播放。图片描述报文必须是最后一个报文且起始位置不能为0。
其它位:
保留,应填1

每种颜色图片数据的格式为以8列(一个字节)为单位,从左上角开始,从上往下一个字高(16行),再从左往右到屏宽,然后再继续下一个字高的屏幕区域。每个bit 0代表亮灯,1代表暗灯。

除最后一个报文外每个报文的图片数据长度为512个字节,一幅图片可能需要多个报文,每个报文均应按照以上格式,起始字节数从0,0x200,0x400依次递增。
...全文
499 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengraoxi 2011-07-19
  • 打赏
  • 举报
回复
mark
火星大能猫 2011-05-12
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wuqueqiao 的回复:]

怎么解决的,怎么不分享出来啊?
[/Quote]
不是很复杂,文字转图片.net有方法,
然后判断图片像素,如果是红色的就是(1or0),反之为0或1.
wuqueqiao 2011-05-09
  • 打赏
  • 举报
回复
怎么解决的,怎么不分享出来啊?
xinyijiayi 2010-09-13
  • 打赏
  • 举报
回复
看看 看看
火星大能猫 2010-07-21
  • 打赏
  • 举报
回复
已解决.
畅想者 2010-07-02
  • 打赏
  • 举报
回复
很简单啊,byte[,] 行列而已
比如byte[0][1] 代表第2行第1个点的值
火星大能猫 2010-05-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 skep99 的回复:]
填充二值图,然后取黑色填充二维数组
C# code

Bitmap bmp = new Bitmap(48, 48);
Graphics g = Graphics.FromImage(bmp);
Font font = new Font("宋体", 36.0f);
Brush blackBr……
[/Quote]

这边的判断要改一下的.
Bitmap bmp = new Bitmap(48, 48);
Graphics g = Graphics.FromImage(bmp);
Font font = new Font("宋体", 36.0f);
Brush blackBrush = new SolidBrush(Color.Black);
Brush whiteBrush = new SolidBrush(Color.White);
g.FillRectangle(whiteBrush, 0, 0, 48, 48);
g.DrawString("我", font, blackBrush, new PointF(-8, 0));
g.Save();

pictureBox1.Image = bmp;

byte[,] matrix = new byte[48, 48];
for (int y = 0; y < 47; y++)
{
for (int x = 0; x < 47; x++)
{
Color pixel = bmp.GetPixel(x, y);
if (pixel.R == 0 && pixel.G == 0 && pixel.B == 0)
matrix[x, y] = 0x1;
}

}



获取的byte二维数组怎么转换呢??
火星大能猫 2010-05-12
  • 打赏
  • 举报
回复
文字是红色的,背景是黑色的.就跟常见的led屏一样.
文字转成图片.然后图片按点阵发送.
找了半天也就找到这么点资料.
晕了.
http://topic.csdn.net/u/20100429/08/5ed965c9-4440-48a1-af72-b60a46177104.html
火星大能猫 2010-05-12
  • 打赏
  • 举报
回复
#PIC23,L,5,5#<本报文起始字节数2字节><2字节标识><图片数据...>
本报文起始字节数2字节:
表示本报文起始字节数(即前面已发送到字节数),因此图片每种颜色总长度最长为64KB

2字节标识:
高2位:
11表示本报文是红色或单色数据
10表示本报文是绿色数据
00表示本报文是图片描述报文,Unicode编码,文字长度应与图片长度换算成文字的长度一致,否则会被屏控卡截断或补充空格
最低位:
0表示本报文不是最后一个报文
1表示本报文是最后一个报文,收到此报文将写入字幕信息准备好播放。图片描述报文必须是最后一个报文且起始位置不能为0。
其它位:
保留,应填1

每种颜色图片数据的格式为以8列(一个字节)为单位,从左上角开始,从上往下一个字高(16行),再从左往右到屏宽,然后再继续下一个字高的屏幕区域。每个bit 0代表亮灯,1代表暗灯。

除最后一个报文外每个报文的图片数据长度为512个字节,一幅图片可能需要多个报文,每个报文均应按照以上格式,起始字节数从0,0x200,0x400依次递增。



给我的资料就这么一些.以数据以Unicode发送.
楼上的救命啊.帮帮忙啊.
dylike 2010-05-10
  • 打赏
  • 举报
回复
先画64个红色格子,然后在格子里写黑字.一格格判断是否格子内有文字黑色,那么就是1,否则就是0
skep99 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wukaiping870123 的回复:]
二维数组不行的啊.led屏不可能识别二维数组的.
[/Quote]


要转成十六进制啊,每8位转成一个字节,转换方法取决于你的led控制芯片
火星大能猫 2010-05-10
  • 打赏
  • 举报
回复
二维数组不行的啊.led屏不可能识别二维数组的.
skep99 2010-05-10
  • 打赏
  • 举报
回复
先要把彩色图片转成二值图,也就是黑白图
zgke 2010-05-10
  • 打赏
  • 举报
回复
如果你的图形是8位图 C3 BD 是对应颜色表里的 数据
如果不是1位图形 就把C3转换为 2进数据看看
火星大能猫 2010-05-10
  • 打赏
  • 举报
回复
led屏是单色的.就是红色的.
而且这个数据时文字转成图片按点阵发送的.
skep99 2010-05-10
  • 打赏
  • 举报
回复
彩色图片?
火星大能猫 2010-05-10
  • 打赏
  • 举报
回复
因为是led屏.所以是取红色的.这个问题不大.
但采取出来的数据为什么是这样的?

:0 0.0.0.0:3700 367 RecvFrom
0000 CB CB CB 00 00 00 00 00 04 00 00 00 A3 CB CB CB ................
0010 00 F4 12 00 00 00 00 00 68 AC F1 00 35 31 30 30 ........h...5100
0020 34 31 30 37 32 30 30 38 00 23 00 50 00 49 00 43 41072008.#.P.I.C
0030 00 31 00 2C 00 30 00 2C 00 33 00 2C 00 39 00 2C .1.,.0.,.3.,.9.,
0040 00 30 00 30 00 3A 00 30 00 30 00 2D 00 32 00 33 .0.0.:.0.0.-.2.3
0050 00 3A 00 30 00 30 00 2C 00 39 00 39 00 2D 00 31 .:.0.0.,.9.9.-.1
0060 00 32 00 2D 00 33 00 31 00 23 00 00 00 FE FF FF .2.-.3.1.#......
0070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0080 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0090 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
00A0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
00B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
00C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
00D0 FF FF FF FF FF FF C3 BD E1 DD BD BD C0 FF FF FF ................
00E0 FF FF FF FF FF FF C3 BD E1 DD BD BD C0 FF FF FF ................
00F0 FF FF FF FF FF FF C3 BD E1 DD BD BD C0 FF FF FF ................
0100 FF FF FF FF FF FF C3 BD E1 DD BD BD C0 FF FF FF ................
0110 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0120 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0130 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0140 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0150 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
0160 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ...............


FF代表黑色的背景可以理解,C3 BD这样是怎么生成的呢??
很急啊.
skep99 2010-05-10
  • 打赏
  • 举报
回复
填充二值图,然后取黑色填充二维数组

Bitmap bmp = new Bitmap(48, 48);
Graphics g = Graphics.FromImage(bmp);
Font font = new Font("宋体", 36.0f);
Brush blackBrush = new SolidBrush(Color.Black);
Brush whiteBrush = new SolidBrush(Color.White);
g.FillRectangle(whiteBrush, 0, 0, 48, 48);
g.DrawString("我", font, blackBrush, new PointF(-8, 0));
g.Save();

pictureBox1.Image = bmp;

byte[,] matrix = new byte[48, 48];
for (int y = 0; y < 47; y++)
{
for (int x = 0; x < 47; x++)
{
if (bmp.GetPixel(x, y) == Color.Black)
matrix[x, y] = 0x1;
}

}
皇城龙三 2010-05-09
  • 打赏
  • 举报
回复
不是很了解,帮忙顶一下!
火星大能猫 2010-05-09
  • 打赏
  • 举报
回复
郁闷啊
加载更多回复(1)

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧