android-gpuimage - 使用 GPUImageView 校正图像
android-gpuimage - image straightening with GPUImageView
在我的 android app.I 中,我想使用 android-gpuimage 库进行图像矫正编辑功能,但 GPUImageView 没有提供 getBitmap()
或 [=13] 的功能=] 那怎么可能请让我知道?这是要查看的代码:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(isStraightenEffectEnabled){
float angle = (progress - 45);
float width = mGPUImageView.getWidth();
float height = mGPUImageView.getHeight();
if (width > height) {
width = mGPUImageView.getHeight();
height = mGPUImageView.getWidth();
}
float a = (float) Math.atan(height/width);
// the length from the center to the corner of the green
float len1 = (width / 2) / (float) Math.cos(a - Math.abs(Math.toRadians(angle)));
// the length from the center to the corner of the black
float len2 = (float) Math.sqrt(Math.pow(width/2,2) + Math.pow(height/2,2));
// compute the scaling factor
float scale = len2 / len1;
Matrix matrix = mGPUImageView.getMatrix();
if (mMatrix == null) {
mMatrix = new Matrix(matrix);
}
matrix = new Matrix(mMatrix);
float newX = (mGPUImageView.getWidth() / 2) * (1 - scale);
float newY = (mGPUImageView.getHeight() / 2) * (1 - scale);
matrix.postScale(scale, scale);
matrix.postTranslate(newX, newY);
matrix.postRotate(angle, mGPUImageView.getWidth() / 2, mGPUImageView.getHeight() / 2);
是否可以得到mGPUImageView.setMatrix(矩阵);
现在这里 getMatrix()
是 GPUImageView
的方法,但 setMatrix()
或 getBitmap()
不适用于 GPUImageView
class。如果可能,有什么解决方法吗?
在 GPUImageView 中添加 getGPUImage class
public GPUImage getGPUImage() {
return mGPUImage;
}
然后得到你可以得到像这样的位图:
mGPUImageView.getGPUImage().getBitmapWithFilterApplied();
您还可以像这样获取位图:
位图位图=mGPUImageView.capture();
您可以获得经过过滤的位图渲染器和像素缓冲区。这可能对您有所帮助。
GPUImageLookupFilter amatorka = new GPUImageLookupFilter();
amatorka.setBitmap(BitmapFactory.decodeResource(getResources(), getResources().getIdentifier("fil_" + position, "drawable", getPackageName())));
GPUImageRenderer renderer = new GPUImageRenderer(amatorka);
renderer.setImageBitmap(bitmap, false);
PixelBuffer buffer = new PixelBuffer(80, 80);
buffer.setRenderer(renderer);
buffer.getBitmap();
在我的 android app.I 中,我想使用 android-gpuimage 库进行图像矫正编辑功能,但 GPUImageView 没有提供 getBitmap()
或 [=13] 的功能=] 那怎么可能请让我知道?这是要查看的代码:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(isStraightenEffectEnabled){
float angle = (progress - 45);
float width = mGPUImageView.getWidth();
float height = mGPUImageView.getHeight();
if (width > height) {
width = mGPUImageView.getHeight();
height = mGPUImageView.getWidth();
}
float a = (float) Math.atan(height/width);
// the length from the center to the corner of the green
float len1 = (width / 2) / (float) Math.cos(a - Math.abs(Math.toRadians(angle)));
// the length from the center to the corner of the black
float len2 = (float) Math.sqrt(Math.pow(width/2,2) + Math.pow(height/2,2));
// compute the scaling factor
float scale = len2 / len1;
Matrix matrix = mGPUImageView.getMatrix();
if (mMatrix == null) {
mMatrix = new Matrix(matrix);
}
matrix = new Matrix(mMatrix);
float newX = (mGPUImageView.getWidth() / 2) * (1 - scale);
float newY = (mGPUImageView.getHeight() / 2) * (1 - scale);
matrix.postScale(scale, scale);
matrix.postTranslate(newX, newY);
matrix.postRotate(angle, mGPUImageView.getWidth() / 2, mGPUImageView.getHeight() / 2);
是否可以得到mGPUImageView.setMatrix(矩阵);
现在这里 getMatrix()
是 GPUImageView
的方法,但 setMatrix()
或 getBitmap()
不适用于 GPUImageView
class。如果可能,有什么解决方法吗?
在 GPUImageView 中添加 getGPUImage class
public GPUImage getGPUImage() {
return mGPUImage;
}
然后得到你可以得到像这样的位图:
mGPUImageView.getGPUImage().getBitmapWithFilterApplied();
您还可以像这样获取位图: 位图位图=mGPUImageView.capture();
您可以获得经过过滤的位图渲染器和像素缓冲区。这可能对您有所帮助。
GPUImageLookupFilter amatorka = new GPUImageLookupFilter();
amatorka.setBitmap(BitmapFactory.decodeResource(getResources(), getResources().getIdentifier("fil_" + position, "drawable", getPackageName())));
GPUImageRenderer renderer = new GPUImageRenderer(amatorka);
renderer.setImageBitmap(bitmap, false);
PixelBuffer buffer = new PixelBuffer(80, 80);
buffer.setRenderer(renderer);
buffer.getBitmap();