android - update - كيفية قياس الصورة النقطية إلى حجم الشاشة؟




android update (4)

أولا الحصول على ارتفاع الشاشة والعرض:
Android: كيفية الحصول على أبعاد الشاشة 1 : احصل على أبعاد الشاشة بالبكسل
إلقاء نظرة على هذا: تغيير حجم الصورة النقطية

أريد أن أعرف كيفية قياس الصورة النقطية لعرض الارتفاع والعرض؟

يمكن لأي شخص من فضلك قل لي كيف نفعل ذلك.

شكرا مونالي


جرب هذا لفك تشفير الصورة النقطية:

حيث imagefilepath هو اسم مسار الصورة ، سيكون في السرية الخيطية إلى الملف باستخدام

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;
}

يمكنك إنشاء نطاق مقعّر استنادًا إلى هذا الرمز.

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);
    }

رمز xml الخاص بي لمشاهدة imageview ،

 <ImageView
    android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:scaleType="center"
    />

يمكنك استخدام Bitmap.createScaledBitmap() ، ولكن تأكد من استخدام صيغة التحويل الصحيحة عند استخدامه:

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);




android