下面的代码可以成功旋转图像,但它会切断图像的角落,并且它会以错误的方向旋转!
Mat cvImage = Highgui.imread("mnt/sdcard/canvasgrid.png");
int degrees = 20;
Point center = new Point(cvImage.cols()/2, cvImage.rows()/2);
Mat rotImage = Imgproc.getRotationMatrix2D(center, degrees, 1.0);
Mat dummy = cvWaterImage;
Imgproc.warpAffine(cvImage, dummy, rotImage, cvImage.size());
rotatedImage = dummy;
Highgui.imwrite("mnt/sdcard/imageRotate.png",rotatedImage);
Run Code Online (Sandbox Code Playgroud)
PLUS旋转图像的背景是黑色的,但我希望它是透明的.
我做错了什么?谢谢
编辑已解决
首先获得旋转图像的新宽度/高度
double radians = Math.toRadians(rotationAngle);
double sin = Math.abs(Math.sin(radians));
double cos = Math.abs(Math.cos(radians));
int newWidth = (int) (scaledImage.width() * cos + scaledImage.height() * sin);
int newHeight = (int) (scaledImage.width() * sin + scaledImage.height() * cos);
int[] …Run Code Online (Sandbox Code Playgroud) 我已经定制了imageview,但它只是旋转它的位图而不是整个视图.我不想使用动画,因为我也拖动了imageview,所以移动动画imageivew结果很奇怪,所以坚持onDraw/draw,加上压倒画也没什么特别的.
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.save();
canvas.rotate(rotationAngle, rotationW, rotationH);
super.onDraw(canvas);
canvas.restore();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能旋转整个视图而不仅仅是它的位图?
我一直在尝试将图像添加到所需位置的大图像.我找到了一种通过addWeighted(src,alpha,water, - ,dst, - )在opencv中添加水印的方法,但问题是水印和表面图像应该是我不想要的相同尺寸.
发现另一种方式(我猜)
Mat srcMat = cvCanvasImage.submat(top/2, (top + height)/2, left/2, (left + width)/2);
Imgproc.cvtColor(mat, srcMat, Imgproc.COLOR_GRAY2BGR,4);
Run Code Online (Sandbox Code Playgroud)
但我不明白怎么做?
谢谢..
UPDATE
Mat cvCanvasImage = Highgui.imread(Environment.getExternalStorageDirectory() + "/wallpapers/castle.jpg");
// Small watermark image
Mat cvWaterImage = Highgui.imread(Environment.getExternalStorageDirectory() +"/square.png");
Size canvasSize = cvWaterImage.size();
int rows = (int) canvasSize.height;
int cols = (int) canvasSize.width;
int left = 0;
int top = 0;
int width = rows;
int height = cols;
Rect ROI = new Rect(left, top, width, height);
Core.addWeighted(cvCanvasImage.submat(ROI), alpha, cvWaterImage, beta, …Run Code Online (Sandbox Code Playgroud)