通过DLL函数取得图像数据放置Pchar中,如果放到bitmap中的byte中?
var
aDisplay :Pchar;
aCapture1 :Array [0..1234567] Of Byte ;
begin
GetMem(aDisplay,640*480*3+1024*5);
CYUSBCAM_ReadDisplayWindowData(0,0,640,480,aDisplay); // 获得图象数据放置在aDisplay Fwidth :=640;
FHeight :=480;
BitMap :=TBitMap.Create;
BitMap.PixelFormat :=pf24bit;
BitMap.Height :=FHeight;
BitMap.Width :=FWidth; try
for y:=0 to FHeight-1 do
begin
pRGB := BitMap.ScanLine[Y];
for x:=0 to Fwidth-1 do
begin
pRGB^.rgbtRed :=;//R;{如何将Pchar类型的aDisplay往Byte中赋值}
pRGB^.rgbtGreen:=;//G;{如何将Pchar类型的aDisplay往Byte中赋值}
pRGB^.rgbtBlue :=;//B;{如何将Pchar类型的aDisplay往Byte中赋值}
inc(pRGB); {如果aCapture1是Array [0..1234567] Of Byte 如下赋值}
pRGB^.rgbtRed :=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+2];//R;
pRGB^.rgbtGreen:=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+1];//G;
pRGB^.rgbtBlue :=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+0];//B;
inc(pRGB);
end;
end;
canvas.draw(0,0,BitMap);
finally
BitMap.free;
end;
end;
var
aDisplay :Pchar;
aCapture1 :Array [0..1234567] Of Byte ;
begin
GetMem(aDisplay,640*480*3+1024*5);
CYUSBCAM_ReadDisplayWindowData(0,0,640,480,aDisplay); // 获得图象数据放置在aDisplay Fwidth :=640;
FHeight :=480;
BitMap :=TBitMap.Create;
BitMap.PixelFormat :=pf24bit;
BitMap.Height :=FHeight;
BitMap.Width :=FWidth; try
for y:=0 to FHeight-1 do
begin
pRGB := BitMap.ScanLine[Y];
for x:=0 to Fwidth-1 do
begin
pRGB^.rgbtRed :=;//R;{如何将Pchar类型的aDisplay往Byte中赋值}
pRGB^.rgbtGreen:=;//G;{如何将Pchar类型的aDisplay往Byte中赋值}
pRGB^.rgbtBlue :=;//B;{如何将Pchar类型的aDisplay往Byte中赋值}
inc(pRGB); {如果aCapture1是Array [0..1234567] Of Byte 如下赋值}
pRGB^.rgbtRed :=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+2];//R;
pRGB^.rgbtGreen:=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+1];//G;
pRGB^.rgbtBlue :=aCapture1[(FHeight-1-y)*Fwidth*3+3*x+0];//B;
inc(pRGB);
end;
end;
canvas.draw(0,0,BitMap);
finally
BitMap.free;
end;
end;
解决方案 »
- delphi问题
- 文件合并和分割问题!!高手帮忙!
- 我用Excel控件打开Excel,但在程序里怎么也不能释放.求救
- 关于拨号网络的几个问题
- 在主窗体跳出之前跳出一个登录窗体,怎么做到?
- 简单的问题,请问在程序中怎样编写代码来设置某个目录为IIS的默认目录?
- 真的要告别亲爱的DELPHI么,大家给我出出主意
- 如何控制局域网内的其他机器
- outlook express 把它的邮件(收到的邮件)是放到什么地方去了?我系统要重装,想把来往的邮件做个备件(不仅仅是通讯薄) 。
- Hadoop可以手动启动,但脚本启动报错
- QUERY可以加WHERE条件RowNum<10查询,TABLE如何实现类似的功能?
- 高手帮忙解决一下
b:pchar;
a,c:byte;
begin
a:=64;
b:=pchar(a);
c:=byte(b);
showmessage(inttostr(c));
end;
CopyMemory(aCapture1,aCapture,640*480*3+1024*5)就搞定了
ss : PChar;
aa : array of byte;
i : integer;
begin
ss := 'abcd';
i := length(ss); SetLength(aa,4); aa[0] := byte(ss[0]);;
showmessage(VarToStr(aa[0]));end;