我们在火车站不是经常看到大的滚动字幕,他只有2种颜色
现在问题就是:怎样把所选的图象变成2种颜色发送出去?
现给出能发送出1种颜色的代码
procedure TForm1.Button1Click(Sender: TObject);
var
NumRead,BmpW,BmpH,FillNum,Wbyte: Integer;
BmpFile:File;
Buffer:Array[1..1024] of byte;
SendBuf:Array of byte;
i:Integer;
begin
if OpenDialog1.FileName='' then begin
ShowMessage('没有指定发送图象文件!');
exit;
end;
Setlength(SendBuf,4);
for i:=0 to 3 do begin
SendBuf[0]:=85;
SendBuf[1]:=170;
SendBuf[2]:=85;
SendBuf[3]:=170;
end;
MsComm1.Output:=SendBuf;//通讯标志
AssignFile(BmpFile,OpenDialog1.FileName);
Reset(BmpFile,1);
BlockRead(BmpFile,Buffer,18,NumRead);
BlockRead(BmpFile,Buffer,4,NumRead);
BmpW:=Buffer[1]+Buffer[2]*256;
Wbyte:=BmpW div 8;
Setlength(SendBuf,2);
for i:=0 to 1 do
SendBuf[i]:=Buffer[i+1];
MsComm1.Output:=SendBuf;//宽度
BlockRead(BmpFile,Buffer,4,NumRead);
BmpH:=Buffer[1]+Buffer[2]*256;
Setlength(SendBuf,2);
for i:=0 to 1 do
SendBuf[i]:=Buffer[i+1];
MsComm1.Output:=SendBuf;//高度
Setlength(SendBuf,2);
SendBuf[0]:=Wbyte mod 256;
SendBuf[1]:=Wbyte div 256;
MsComm1.Output:=SendBuf;//宽度字节数
Setlength(SendBuf,2);
SendBuf[0]:=(Wbyte*BmpH) mod 256;
SendBuf[1]:=(Wbyte*BmpH) div 256;
MsComm1.Output:=SendBuf;//图象总字节数
Setlength(SendBuf,2);
SendBuf[0]:=Wbyte*16 mod 256;
SendBuf[1]:=Wbyte*16 div 256;
MsComm1.Output:=SendBuf;//相隔16行数据的位置
Setlength(SendBuf,1);
SendBuf[0]:=mode.ItemIndex;
MsComm1.Output:=SendBuf;//显示模式
FillNum:=(4-(BmpW div 8)mod 4)mod 4;
BlockRead(BmpFile,Buffer,36,NumRead);
Repeat
BlockRead(BmpFile,Buffer,(BmpW div 8),NumRead);
Setlength(SendBuf,NumRead);
for i:=0 to NumRead-1 do
SendBuf[NumRead-1-i]:=Buffer[i+1];
BlockRead(BmpFile,Buffer,FillNum,NumRead);
repeat
until(MsComm1.OutBufferCount=0);
MsComm1.Output:=SendBuf;
until(NumRead=0) ;
CloseFile(BmpFile);
ShowMessage('发送完成!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MSComm1.CommPort:=1;{使用COM2口为通信口}
MSComm1.InBufferSize:=1024;{设定接收队列长度为1KB}
MSComm1.OutBufferSize:=1024;{设定发送队列长度为1KB}
MSComm1.Settings:='4800,N,8,1';{波特率9600b/s,无校验,8个数据位,1个停止位}
MSComm1.InputLen:=0;{读取整个接收缓冲区内容}
MSComm1.InBufferCount:=0;{清除接收缓冲区}
MSComm1.PortOpen:=True;{打开串行口}
end;希望能马上解决,谢谢,谢谢,急急!!!!
现在问题就是:怎样把所选的图象变成2种颜色发送出去?
现给出能发送出1种颜色的代码
procedure TForm1.Button1Click(Sender: TObject);
var
NumRead,BmpW,BmpH,FillNum,Wbyte: Integer;
BmpFile:File;
Buffer:Array[1..1024] of byte;
SendBuf:Array of byte;
i:Integer;
begin
if OpenDialog1.FileName='' then begin
ShowMessage('没有指定发送图象文件!');
exit;
end;
Setlength(SendBuf,4);
for i:=0 to 3 do begin
SendBuf[0]:=85;
SendBuf[1]:=170;
SendBuf[2]:=85;
SendBuf[3]:=170;
end;
MsComm1.Output:=SendBuf;//通讯标志
AssignFile(BmpFile,OpenDialog1.FileName);
Reset(BmpFile,1);
BlockRead(BmpFile,Buffer,18,NumRead);
BlockRead(BmpFile,Buffer,4,NumRead);
BmpW:=Buffer[1]+Buffer[2]*256;
Wbyte:=BmpW div 8;
Setlength(SendBuf,2);
for i:=0 to 1 do
SendBuf[i]:=Buffer[i+1];
MsComm1.Output:=SendBuf;//宽度
BlockRead(BmpFile,Buffer,4,NumRead);
BmpH:=Buffer[1]+Buffer[2]*256;
Setlength(SendBuf,2);
for i:=0 to 1 do
SendBuf[i]:=Buffer[i+1];
MsComm1.Output:=SendBuf;//高度
Setlength(SendBuf,2);
SendBuf[0]:=Wbyte mod 256;
SendBuf[1]:=Wbyte div 256;
MsComm1.Output:=SendBuf;//宽度字节数
Setlength(SendBuf,2);
SendBuf[0]:=(Wbyte*BmpH) mod 256;
SendBuf[1]:=(Wbyte*BmpH) div 256;
MsComm1.Output:=SendBuf;//图象总字节数
Setlength(SendBuf,2);
SendBuf[0]:=Wbyte*16 mod 256;
SendBuf[1]:=Wbyte*16 div 256;
MsComm1.Output:=SendBuf;//相隔16行数据的位置
Setlength(SendBuf,1);
SendBuf[0]:=mode.ItemIndex;
MsComm1.Output:=SendBuf;//显示模式
FillNum:=(4-(BmpW div 8)mod 4)mod 4;
BlockRead(BmpFile,Buffer,36,NumRead);
Repeat
BlockRead(BmpFile,Buffer,(BmpW div 8),NumRead);
Setlength(SendBuf,NumRead);
for i:=0 to NumRead-1 do
SendBuf[NumRead-1-i]:=Buffer[i+1];
BlockRead(BmpFile,Buffer,FillNum,NumRead);
repeat
until(MsComm1.OutBufferCount=0);
MsComm1.Output:=SendBuf;
until(NumRead=0) ;
CloseFile(BmpFile);
ShowMessage('发送完成!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MSComm1.CommPort:=1;{使用COM2口为通信口}
MSComm1.InBufferSize:=1024;{设定接收队列长度为1KB}
MSComm1.OutBufferSize:=1024;{设定发送队列长度为1KB}
MSComm1.Settings:='4800,N,8,1';{波特率9600b/s,无校验,8个数据位,1个停止位}
MSComm1.InputLen:=0;{读取整个接收缓冲区内容}
MSComm1.InBufferCount:=0;{清除接收缓冲区}
MSComm1.PortOpen:=True;{打开串行口}
end;希望能马上解决,谢谢,谢谢,急急!!!!
解决方案 »
- delphi调用vc编写dll出错的请教
- 'END' expected but 'ELSE' found
- sql bigint 8 除100 且留小数
- 如何让程序运行DOS命令
- StringGrid 如何才能对其进行编辑呢(变为可写的不是只读的)
- 您好, fcOutlookBar fcButton (fc系列) dxEdLib dxDBELib(dx系列) 这些控件在那儿可以下载 ?
- 打印疑问
- 关于在access中数据类型是图片(OLE对象)的问题
- 用select 限制DBGrid的显示的问题。
- 本人急需一表格组件(VCL),最好里边能放Label,Edit等,如有谁知道此类组件,本人感激不尽
- 使用TidTCPClient的程序在Windows2000专业版中不使用管理员登录就无法连接服务器!
- 数据状态的问题!
关键是送出的几个信号
宽/高/字节数等等都是事先的约定
只要把BMP文件的结构搞清楚我想这个不是很难的问题吧
http://asp.6to23.com/iseesoft/devdoc/imgdoc/bmp_fileformat.htm
SendBuf[0]:=mode.ItemIndex;
MsComm1.Output:=SendBuf;//显示模式
这个MODE包括什么?