一幅小位图旋转45度角以后,四周出现了黑边或白边(按旋转后整个图像所在的矩形来说),现在要把它贴到背景图上,黑边不要,如何实现?
部分代码如下: //生成掩膜图
bmpDistortionMask := TBitmap.Create;
bmpDistortionMask.Assign(bmpDest);
bmpDistortionMask.Canvas.CopyMode := cmNotSrcCopy;
bmpDistortionMask.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
//用掩膜图处理源位图
imgDistortion.Canvas.CopyMode := cmMergePaint;
imgDistortion.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
//把处理过的源位图贴到背景上
imgCarPhoto.Canvas.CopyMode:=cmSrcPaint;
imgCarPhoto.Canvas.CopyRect(ARect,imgDistortion.Canvas,BRect);
//释放资源
bmpDistortionMask.Free;我实现的是黑边没了,但小图变色了,不是原来的图色。
部分代码如下: //生成掩膜图
bmpDistortionMask := TBitmap.Create;
bmpDistortionMask.Assign(bmpDest);
bmpDistortionMask.Canvas.CopyMode := cmNotSrcCopy;
bmpDistortionMask.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
//用掩膜图处理源位图
imgDistortion.Canvas.CopyMode := cmMergePaint;
imgDistortion.Canvas.CopyRect(BRect,bmpDistortionMask.Canvas,BRect);
//把处理过的源位图贴到背景上
imgCarPhoto.Canvas.CopyMode:=cmSrcPaint;
imgCarPhoto.Canvas.CopyRect(ARect,imgDistortion.Canvas,BRect);
//释放资源
bmpDistortionMask.Free;我实现的是黑边没了,但小图变色了,不是原来的图色。
首先用 tgpgraphics类创建一个以背景图的canvas.handle 的对象
然后再将你的图片旋转直接画到这个 tgpgraphics上即可
M : TGpMatrix;
Center : Tgppoint;
Image : TGpBitmap;
FAngle : integer;//旋转角度
begin
try
Image := TGpBitmap.Craete('a.bmp');
gp := TGpGraphics.Create(bmp.Canvas.Handle);//bmp为背景图
M := TGpMatrix.Create;
Center.X := bmp.Width div 2;
Center.Y := bmp.Height div 2;
M.RotateAt(FAngle,Center);
gp.SetTransform(M);
gp.DrawImage(Image,Gr);
finally
gp.Free;
Image.Free;
m.Free;
end;
end;
多调试一下嘛,我在代码中Gr都没初始化,你当然得改改
参考俺的代码
这段换成你想要的颜色,错误点也就是旋转以后多出的部分,你可以直接把这图形的颜色换成你背景大图相对应位置的颜色,你看过我空间了的,你把中间那块改成双线性插值好了,质量会好很多,现在的那个只是线性插值~
begin
//错误点也设置为白色
DestBmp.Canvas.Pixels[j,i] := RGB(255,255,255);
end ;