我试图将左侧的图像“歪斜”10%。这样看起来好像有点转。我认为最简单的方法是创建一个自定义的“skewedimageview”,它扩展了ImageView并使用了覆盖的setFrame方法。 所以要更清楚一点:这就是我想要的
但是我尝试了很多可能的矩阵组合,并尝试设置setSkew(听起来这就是我想要的)。我尝试使用和不定义枢轴点,但两者都不起作用。我也不确定选择什么点作为支点:它应该是一个保持不变的点,但我认为在这个转换期间有很多未改变的点(完整的右侧和水平中心线)。
我还尝试了mapPoints,然后将左上角的5%降低,右下角的5%降低,但这似乎也不起作用。
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
Matrix matrix = getImageMatrix();
matrix.setSkew(1f,0.9f);
setImageMatrix(matrix);
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
}
有没有人知道如何使用setSkew或mapPoints解决这个问题以及最佳做法是什么?或者手动创建转换矩阵(但我认为这必须比使用这些方法困难得多)。
修改 正如pskink所建议的,我使用了函数setpoly2poly,如下所示:
@Override
protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {
float height = frameBottom - frameTop;
float width = frameRight - frameLeft;
System.out.println("Height is "+height);
int dy=0.05*height;
Matrix matrix = getImageMatrix();
float[] startpoints = {0,0,0,height}; //{0,0} =top left, {0,height}= left bottom
float[] endpoints = {0,0+dy,0,height-dy}; //topleft 5% down, bottom left 5% up
matrix.setPolyToPoly(startpoints,0,endpoints,0,2);
setImageMatrix(matrix);
return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);
}
它做了一些事情,但它做的主要是放大到图像的左上角......
答案 0 :(得分:1)
我遇到了这个问题并找到了解决方案〜!
Bitmap bitmap = addWhiteBorder(bitmapsrc, 2);
Matrix matrix2 = new Matrix();
int oldw = bitmap.getWidth();
int oldh = bitmap.getHeight();
float d_up = oldh / 20;
float d_down = d_up + 10;
float[] src2 = new float[] { 0, 0, oldw, 0, oldw,
oldh, 0, oldh };
float[] dst2 = new float[] { 0, d_up, oldw, 0,
oldw, oldh, 0, oldh - d_down };
matrix2.setPolyToPoly(src2, 0, dst2, 0,
src2.length >> 1);
Bitmap bMatrix2 = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(),
matrix2, true);
imBookCover.setImageBitmap(bMatrix2);