使用AspectRatio android画布缩小大型图像
我想将大图像缩小到位图,并将其放入画布中。我找到了一个很好的解决方案,但有一个问题,它提供了位图的黑色背景。我只想要有透明背景的图像!这是密码使用AspectRatio android画布缩小大型图像,android,canvas,bitmap,resize,Android,Canvas,Bitmap,Resize,我想将大图像缩小到位图,并将其放入画布中。我找到了一个很好的解决方案,但有一个问题,它提供了位图的黑色背景。我只想要有透明背景的图像!这是密码 Bitmap scaleDownLargeImageWithAspectRatio(Bitmap image) { int imaheVerticalAspectRatio,imageHorizontalAspectRatio; float bestFitScalingFactor=0; float percesionValue=
Bitmap scaleDownLargeImageWithAspectRatio(Bitmap image)
{
int imaheVerticalAspectRatio,imageHorizontalAspectRatio;
float bestFitScalingFactor=0;
float percesionValue=(float) 0.2;
//getAspect Ratio of Image
int imageHeight=(int) (Math.ceil((double) image.getHeight()/100)*100);
int imageWidth=(int) (Math.ceil((double) image.getWidth()/100)*100);
int GCD=BigInteger.valueOf(imageHeight).gcd(BigInteger.valueOf(imageWidth)).intValue();
imaheVerticalAspectRatio=imageHeight/GCD;
imageHorizontalAspectRatio=imageWidth/GCD;
Log.i("scaleDownLargeImageWIthAspectRatio","Image Dimensions(W:H): "+imageWidth+":"+imageHeight);
Log.i("scaleDownLargeImageWIthAspectRatio","Image AspectRatio(W:H): "+imageHorizontalAspectRatio+":"+imaheVerticalAspectRatio);
//getContainer Dimensions
int displayWidth = getWindowManager().getDefaultDisplay().getWidth();
int displayHeight = getWindowManager().getDefaultDisplay().getHeight();
//I wanted to show the image to fit the entire device, as a best case. So my ccontainer dimensions were displayWidth & displayHeight. For your case, you will need to fetch container dimensions at run time or you can pass static values to these two parameters
int leftMargin = 0;
int rightMargin = 0;
int topMargin = 0;
int bottomMargin = 0;
int containerWidth = displayWidth - (leftMargin + rightMargin);
int containerHeight = displayHeight - (topMargin + bottomMargin);
Log.i("scaleDownLargeImageWIthAspectRatio","Container dimensions(W:H): "+containerWidth+":"+containerHeight);
//iterate to get bestFitScaleFactor per constraints
while((imageHorizontalAspectRatio*bestFitScalingFactor <= containerWidth) &&
(imaheVerticalAspectRatio*bestFitScalingFactor<= containerHeight))
{
bestFitScalingFactor+=percesionValue;
}
//return bestFit bitmap
int bestFitHeight=(int) (imaheVerticalAspectRatio*bestFitScalingFactor);
int bestFitWidth=(int) (imageHorizontalAspectRatio*bestFitScalingFactor);
Log.i("scaleDownLargeImageWIthAspectRatio","bestFitScalingFactor: "+bestFitScalingFactor);
Log.i("scaleDownLargeImageWIthAspectRatio","bestFitOutPutDimesions(W:H): "+bestFitWidth+":"+bestFitHeight);
image=Bitmap.createScaledBitmap(image, bestFitWidth,bestFitHeight, true);
int leftPadding=(containerWidth-image.getWidth())/2;
int topPadding=(containerHeight-image.getHeight())/4;
Bitmap backDrop=Bitmap.createBitmap(containerWidth, containerHeight, Bitmap.Config.RGB_565);
Canvas can = new Canvas(backDrop);
can.drawBitmap(image, leftPadding, topPadding, null);
return backDrop;
}
使用Aspectratio(位图图像)向下缩放大图像
{
国际图像垂直光谱,图像水平投影;
浮点最佳拟合比例因子=0;
float perceionvalue=(float)0.2;
//获取图像的纵横比
int imageHeight=(int)(Math.ceil((double)image.getHeight()/100)*100);
int imageWidth=(int)(Math.ceil((double)image.getWidth()/100)*100);
int GCD=biginger.valueOf(imageHeight).GCD(biginger.valueOf(imageWidth)).intValue();
imaheVerticalAspectRatio=图像高度/GCD;
imageHorizontalAspectRatio=图像宽度/GCD;
Log.i(“使用Aspectratio缩放的向下大图像”,“图像尺寸(W:H):“+imageWidth+”:“+imageHeight”);
Log.i(“缩放后的大图像与AspectRatio”,“图像AspectRatio(W:H):“+imageHorizontalAspectRatio+”:“+ImageVerticalSpectratio”);
//getContainer维度
int displayWidth=getWindowManager().getDefaultDisplay().getWidth();
int displayHeight=getWindowManager().getDefaultDisplay().getHeight();
//我希望显示图像以适合整个设备,这是最好的情况。因此,我的ccontainer维度是displayWidth和displayHeight。对于您的情况,您需要在运行时获取容器维度,或者您可以将静态值传递给这两个参数
int leftMargin=0;
int rightMargin=0;
int-topMargin=0;
int-bottomMargin=0;
int containerWidth=显示宽度-(左边距+右边距);
int containerHeight=显示高度-(上边距+下边距);
Log.i(“按Aspectratio缩放的大尺寸图像”,“容器尺寸(宽:高):“+容器宽度+”:“+容器高度”);
//迭代以获取每个约束的bestFitScaleFactor
而((imageHorizontalAspectRatio*bestFitScalingFactorok。只需删除
int leftPadding=(containerWidth-image.getWidth())/2;
int topPadding=(containerHeight-image.getHeight())/4;
这两行并检查。如果不起作用,则位图background=Bitmap.createBitmap(containerWidth、containerHeight、Bitmap.Config.RGB_565);然后将Config.RGB_565更改为其他值不要删除leftPadding和topPadding,只需将它们设置为0即可。