我有三幅同样大小(背景为黑色)的图,分别是指向"下\右\上",我想把"右"进行水平翻转变成"左",然后把四幅图水平并列画成一幅图,结果发现前三幅图拼接是正常的,但第四幅图与前三幅图之间多了一条线.程序中用的代码如下,大家帮看看是怎么回事?var
bmps:array [0..3] of TBitmap;
bmp,newBmp:TBitmap;
i,x,y:integer;
SrcR,DesR:TRect;begin
//初始化及读取前三幅图略 x:=bmps[1].Width;
y:=bmps[1].Height;
SrcR:=Rect(0, 0, x, y);
DesR:=Rect(x, 0, 0, y);
bmp.Width := x;
bmp.Height := y;
bmp.Canvas.CopyRect(DesR, bmps[1].Canvas, SrcR);
bmps[3].Assign(bmp);
newBmp.SetSize(bmps[0].Width * 4, bmps[0].Height);
for i := 0 to 3 do
newBmp.Canvas.Draw( i * bmps[0].Width , 0 , Bmps[i]); //其他略
end;
bmps:array [0..3] of TBitmap;
bmp,newBmp:TBitmap;
i,x,y:integer;
SrcR,DesR:TRect;begin
//初始化及读取前三幅图略 x:=bmps[1].Width;
y:=bmps[1].Height;
SrcR:=Rect(0, 0, x, y);
DesR:=Rect(x, 0, 0, y);
bmp.Width := x;
bmp.Height := y;
bmp.Canvas.CopyRect(DesR, bmps[1].Canvas, SrcR);
bmps[3].Assign(bmp);
newBmp.SetSize(bmps[0].Width * 4, bmps[0].Height);
for i := 0 to 3 do
newBmp.Canvas.Draw( i * bmps[0].Width , 0 , Bmps[i]); //其他略
end;
解决方案 »
- 为什么我备份数据库的时候,却不找不到数据库文件呢?各位大虾知道的,告诉我一下。
- 绘制实时曲线
- 有没有哪位朋友可以找到d7高效数据库程序设计200分求之~!
- 大侠指点我一下关于TDBGrid输入的问题
- ADOQuery中如何对对select出来的记录直接操作?
- 关于Excel问题(高分征解)
- 如何TClientDataSet通过设置IndexFieldNames达到升序及降序功能???
- Delphi6 不能用 vararrayof 吗?D5可以呀
- 急!进去再说
- 关于ADO和ACCESS的一段代码.难道都要这样连接吗?高手来吧!
- XE2下开发,FTP下载中文名文件,显示为乱码?
- delphi 接口
改为
DesR:=Rect(x - 1, 0, - 1, y);
或
StretchBlt(Bmp.Canvas.Handle, 0, 0, X, Y,
bmps[1].canvas.Handle,X-1,0,-X,Y,
SrcCopy);
或是用scanline方法做镜像我查了下,那个copyrect最终调用的是StrechBlt,这个API设计的比较巧妙,具体可以查一下,出现那个折线,打个比方,以Y轴镜像,那个Y=0坐标这一像素不会保留,从而从源图少了一像素列没拷过去,所以加一个一像素偏移,得到完整镜像