回答
試試這個解碼位圖:
其中imagefilepath是圖像的路徑名稱,它將在String中隱含,通過使用
File photos= new File(imageFilePath);
凡照片是圖像的文件名文件,現在你根據:您的要求設置了高度和寬度。
public void main(){
Bitmap bitmap = decodeFile(photo);
bitmap = Bitmap.createScaledBitmap(bitmap,150, 150, true);
imageView.setImageBitmap(bitmap);
}
private Bitmap decodeFile(File f){
try {
//decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE=70;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale++;
}
//decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
先拿到屏幕的高度和寬度:
Android: How to get screen dimensions 1:Get screen dimensions in pixels然後
看看這個: Resizing a Bitmap
我有一個類似的挑戰,我想將寬度拉伸到屏幕的100%,但保持寬高比不變。所以,我沒有這個..
創建延伸的ScalableImageView類的ImageView:
public class ScalableImageView extends ImageView {
public boolean isMeasured = true;
public ScalableImageView(Context context) {
super(context);
}
public ScalableImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScalableImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
try
{
Drawable drawable = getDrawable();
if (drawable == null)
{
setMeasuredDimension(0, 0);
}
else
{
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = width * drawable.getIntrinsicHeight()/drawable.getIntrinsicWidth();
setMeasuredDimension(width, height);
}
}
catch (Exception e)
{
isMeasured = false;
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
在佈局XML文件,我有這樣的定義的圖像佔位符:
<ScalableImageView android:id="@+id/image1"
android:layout_centerHorizontal="true"
android:src="@drawable/cam_image_placeholder"
android:scaleType="fitCenter"
android:layout_gravity="center_horizontal"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:adjustViewBounds="true"
android:visibility="invisible"
android:layout_marginBottom="6px">
</ScalableImageView>
而且然後加載/設置它是這樣的:
ScalableImageView imgView = null;
imgView = (ScalableImageView)findViewById(imgViewResource);
imgView.setImageDrawable(myDrawable);
imgView.setVisibility(ScalableImageView.VISIBLE);
您可以使用Bitmap.createScaledBitmap()
,但使s URE使用正確的換算公式,當你使用它:
final float scale = getContext().getResources().getDisplayMetrics().density;
int pixels = (int) (dps * scale + 0.5f);
在Bitmap.createScaledBitmap()
單位的寬度和高度都是「像素」,而你應該總是設置你的尺寸的密度獨立像素(DP單位)描述爲here。
所以,如果你想顯示你的圖像保持密度的獨立性 - 即你的圖像會佔據屏幕的相同部分,在任何設備上 - 你需要使用類似下面的代碼:
Bitmap b = decodeScaledFile(f);
final float scale = mContext.getResources().getDisplayMetrics().density;
int p = (int) (SIZE_DP * scale + 0.5f);
Bitmap b2 = Bitmap.createScaledBitmap(b, p, p, true);
其中SIZE_DP是什麼? – LuxuryMode
@LuxuryMode'SIZE_DP'是密度獨立像素中圖像的大小 - 請參閱[這裏](http://developer.android.com/guide/topics/resources/more-resources.html#Dimension) –
確實使用createScaledBitmap實際上創建了一個全新的位圖,因此您使用2個位圖的內存?例如,如果第一個位圖佔用x個字節,那麼縮放2的位圖會佔用2 * 2 = 4倍加上原始數據,因此總共使用大約4x + x = 5x個字節? –
你可以基於此代碼創建一個scaledBitmap。
private Bitmap getScaledBitMapBaseOnScreenSize(Bitmap bitmapOriginal){
Bitmap scaledBitmap=null;
try {
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = bitmapOriginal.getWidth();
int height = bitmapOriginal.getHeight();
float scaleWidth = metrics.scaledDensity;
float scaleHeight = metrics.scaledDensity;
// create a matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// recreate the new Bitmap
scaledBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, width, height, matrix, true);
}
catch (Exception e){
e.printStackTrace();
}
return scaledBitmap;
}
方法調用&設置縮放圖像的ImageView
Bitmap scaleBitmap=getScaledBitMapBaseOnScreenSize(originalBitmapImage);
if(scaleBitmap!=null) {
imageView.setImageBitmap(scaleBitmap);
}
爲ImageView的我的XML代碼,
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:scaleType="center"
/>
- 1. 將頁面縮放到屏幕大小
- 2. 如何在Pygame中將圖像縮放到屏幕大小
- 3. 放大/縮小屏幕UI圖表
- 4. 如何將動態壁紙縮放到屏幕大小?
- 5. android縮放位圖到屏幕尺寸
- 6. 放大和縮小android屏幕
- 7. Oracle APEX:將圖像縮放到屏幕
- 8. Android:將幾個按鈕縮放到屏幕大小
- 9. 我應該使用矩陣將位圖縮放爲屏幕大小嗎?
- 10. Xamarin.Forms(XAML):縮放到更小的屏幕
- 11. Python/Pygame:如何使按鈕在屏幕上縮放按鈕和屏幕大小?
- 12. 如何在用戶捏屏幕時放大/縮小UIImage對象?
- 13. 縮放固定大小的頁面到屏幕的寬度?
- 14. 不能讓菜單欄縮放到屏幕大小
- 15. 屏幕大小和位圖的dpi
- 16. JavaFX的全屏 - 縮放元素根據屏幕大小
- 17. 如何縮放圖像,使其始終爲Android RelativeLayout中屏幕大小的75%?
- 18. Android上的縮放小部件(dp,px,屏幕大小)
- 19. 如何根據手機屏幕大小增加位圖圖像大小?
- 20. 縮小放大位圖或畫布
- 21. Android位圖/畫布放大或縮小
- 22. Java - 使位圖縮放到您的屏幕尺寸?
- 23. 如何將大位圖縮放爲平方位圖
- 24. 如何使用AutoLayout縮放視圖相對於屏幕大小的視圖高度和位置
- 25. ImageView限制拖放和縮小屏幕
- 26. 如何在不渲染整個屏幕的情況下放大/縮小到OpenGL屏幕
- 27. 如何重新縮放位圖圖像大小?
- 28. 如何在調整屏幕大小時將div放置在中心位置?
- 29. 將圖片大小縮小到WordPress的縮略圖大小
- 30. Android Image縮放比屏幕大
你有什麼?包含ImageView,或者位圖/ Drawable和Canvas的佈局? – Kaj
你有檢查過這些嗎? – Venky
如果佈局是畫布,科爾多瓦會自動縮放畫布以適應不同的屏幕尺寸,還是我們必須手動執行? – bouncingHippo