एंड्रॉइड: पहलू अनुपात को बनाए रखते हुए एक छवि को स्क्रीन की चौड़ाई तक कैसे बढ़ाया जाए?


118

मैं एक छवि डाउनलोड करना चाहता हूं (अज्ञात आकार का, लेकिन जो हमेशा लगभग चौकोर होता है) और इसे प्रदर्शित करता है ताकि यह स्क्रीन को क्षैतिज रूप से भर दे, और किसी भी स्क्रीन आकार पर छवि के पहलू अनुपात को बनाए रखने के लिए लंबवत रूप से फैला हो। यहाँ मेरा (गैर-कार्यशील) कोड है। यह छवि को क्षैतिज रूप से फैलाता है, लेकिन लंबवत नहीं, इसलिए इसे स्क्वीज़ किया जाता है ...

ImageView mainImageView = new ImageView(context);
    mainImageView.setImageBitmap(mainImage); //downloaded from server
    mainImageView.setScaleType(ScaleType.FIT_XY);
    //mainImageView.setAdjustViewBounds(true); 
    //with this line enabled, just scales image down
    addView(mainImageView,new LinearLayout.LayoutParams( 
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

क्या सभी Android उपकरणों में समान चौड़ाई / ऊंचाई अनुपात है? यदि नहीं, तो मूल अनुपात को संरक्षित करते हुए पूरी चौड़ाई / ऊंचाई को फिट करने के लिए एक छवि को स्केल करना असंभव है ...
NoozNooz42

4
नहीं, मैं नहीं चाहता कि छवि स्क्रीन को भरे, बस स्क्रीन की चौड़ाई के पैमाने पर, मुझे परवाह नहीं है कि छवि कितनी स्क्रीन खड़ी लेती है, जब तक कि छवि सही अनुपात में नहीं है।
फ्रेडले

1
इसी तरह का सवाल, अच्छा जवाब: stackoverflow.com/questions/4677269/…
Pēteris Caune

1
क्या 'adjustViewBounds' काम नहीं किया?
दर्प

जवाबों:


132

मैंने एक कस्टम दृश्य के साथ इसे पूरा किया। सेट लेआउट_आकर्ष = "fill_parent" और layout_height = "wra_content", और इसे उचित ड्राअबल पर इंगित करें:

public class Banner extends View {

  private final Drawable logo;

  public Banner(Context context) {
    super(context);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs) {
    super(context, attrs);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  @Override protected void onMeasure(int widthMeasureSpec,
      int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = width * logo.getIntrinsicHeight() / logo.getIntrinsicWidth();
    setMeasuredDimension(width, height);
  }
}

12
धन्यवाद!! यह सही उत्तर होना चाहिए! :) मैंने इस पोस्ट में थोड़ा और लचीलेपन के लिए इसे समायोजित किया: stackoverflow.com/questions/4677269/… वहाँ मैं एक ImageView का उपयोग करता हूं ताकि कोई XML में ड्रॉबल सेट कर सके या छवि को सेट करने के लिए सामान्य ImageView जैसे कोड में उपयोग कर सके। बहुत अच्छा काम करता है!
पैट्रिक बूस

1
फ्रीकिन प्रतिभा! एक विजेता की तरह काम किया! धन्यवाद यह मेरी छवि को सभी स्क्रीन आकारों में सही नहीं शीर्ष पर एक बैनर के साथ हल किया है! आपको बहुत - बहुत धन्यवाद!
जेपीएम

1
लोगो के लिए देखें अशक्त (यदि आप इंटरनेट से सामग्री डाउनलोड कर रहे हैं)। अन्यथा, यह बहुत अच्छा काम करता है, XML स्निपेट के लिए पैट्रिक के पद का पालन करें।
आर्टेम रसाकोवस्की

44
मुझे विश्वास नहीं हो रहा है कि एंड्रॉइड पर चीजों को करना कितना मुश्किल है जो iOS और विंडोज फोन में तुच्छ रूप से आसान हैं।
mxcl

1
मैंने कुछ बदलाव किए हैं, लेकिन उन्हें कहीं और पोस्ट करने के बजाय, क्या इस उत्तर को सामुदायिक विकि में बदलना संभव होगा? मेरे परिवर्तन वे सभी चीजें हैं जो यहां बताए गए विशेष मामलों को संभालती हैं, साथ ही यह चुनने की क्षमता भी है कि लेआउट परिभाषा के माध्यम से किस पक्ष का आकार बदल जाता है।
स्टीव पोमेरॉय

24

अंत में, मैंने मैन्युअल रूप से आयाम उत्पन्न किए, जो बहुत अच्छा काम करता है:

DisplayMetrics dm = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = width * mainImage.getHeight() / mainImage.getWidth(); //mainImage is the Bitmap I'm drawing
addView(mainImageView,new LinearLayout.LayoutParams( 
        width, height));

मैं अपने मुद्दे को ठीक करने के लिए इस तरह के समाधान की तलाश में हूं। इस गणना की मदद से, मुझे पहलू अनुपात को कम किए बिना इसे सफलतापूर्वक लोड करने की छवि मिली।
स्टीव

21

मैं सिर्फ इसके लिए स्रोत कोड पढ़ता हूं ImageViewऔर यह मूल रूप से इस धागे में उपवर्ग समाधानों का उपयोग किए बिना असंभव है। में ImageView.onMeasureहम इन पंक्तियों के लिए मिलता है:

        // Get the max possible width given our constraints
        widthSize = resolveAdjustedSize(w + pleft + pright, mMaxWidth, widthMeasureSpec);

        // Get the max possible height given our constraints
        heightSize = resolveAdjustedSize(h + ptop + pbottom, mMaxHeight, heightMeasureSpec);

कहाँ hऔर wछवि के आयाम हैं, और p*पैडिंग है।

और तब:

private int resolveAdjustedSize(int desiredSize, int maxSize,
                               int measureSpec) {
    ...
    switch (specMode) {
        case MeasureSpec.UNSPECIFIED:
            /* Parent says we can be as big as we want. Just don't be larger
               than max size imposed on ourselves.
            */
            result = Math.min(desiredSize, maxSize);

इसलिए यदि आपके पास layout_height="wrap_content"यह सेट है widthSize = w + pleft + pright, या दूसरे शब्दों में, अधिकतम चौड़ाई छवि की चौड़ाई के बराबर है।

इसका मतलब यह है कि जब तक आप एक सटीक आकार निर्धारित नहीं करते हैं, तब तक चित्र बढ़े हुए नहीं होते हैं । मैं इसे एक बग मानता हूं, लेकिन सौभाग्य है कि Google को नोटिस लेने या इसे ठीक करने के लिए Google मिल रहा है। संपादित करें: अपने स्वयं के शब्दों का भोजन करते हुए, मैंने एक बग रिपोर्ट प्रस्तुत की और वे कहते हैं कि यह भविष्य के रिलीज में तय किया गया है!

एक और समाधान

यहाँ एक और उपवर्गित वर्कअराउंड है, लेकिन आपको (सिद्धांत रूप में, मुझे वास्तव में इसका अधिक परीक्षण नहीं करना चाहिए !) कहीं भी इसका उपयोग करने में सक्षम होना चाहिए ImageView। इसका उपयोग करने के लिए सेट layout_width="match_parent", और layout_height="wrap_content"। यह स्वीकृत समाधान की तुलना में बहुत अधिक सामान्य है। जैसे आप फिट-टू-हाइट के साथ-साथ फिट-टू-वेड भी कर सकते हैं।

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

// This works around the issue described here: http://stackoverflow.com/a/12675430/265521
public class StretchyImageView extends ImageView
{

    public StretchyImageView(Context context)
    {
        super(context);
    }

    public StretchyImageView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public StretchyImageView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        // Call super() so that resolveUri() is called.
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        // If there's no drawable we can just use the result from super.
        if (getDrawable() == null)
            return;

        final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
        final int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);

        int w = getDrawable().getIntrinsicWidth();
        int h = getDrawable().getIntrinsicHeight();
        if (w <= 0)
            w = 1;
        if (h <= 0)
            h = 1;

        // Desired aspect ratio of the view's contents (not including padding)
        float desiredAspect = (float) w / (float) h;

        // We are allowed to change the view's width
        boolean resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;

        // We are allowed to change the view's height
        boolean resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;

        int pleft = getPaddingLeft();
        int pright = getPaddingRight();
        int ptop = getPaddingTop();
        int pbottom = getPaddingBottom();

        // Get the sizes that ImageView decided on.
        int widthSize = getMeasuredWidth();
        int heightSize = getMeasuredHeight();

        if (resizeWidth && !resizeHeight)
        {
            // Resize the width to the height, maintaining aspect ratio.
            int newWidth = (int) (desiredAspect * (heightSize - ptop - pbottom)) + pleft + pright;
            setMeasuredDimension(newWidth, heightSize);
        }
        else if (resizeHeight && !resizeWidth)
        {
            int newHeight = (int) ((widthSize - pleft - pright) / desiredAspect) + ptop + pbottom;
            setMeasuredDimension(widthSize, newHeight);
        }
    }
}

मैंने एक बग रिपोर्ट प्रस्तुत की । देखो, क्योंकि यह अनदेखा है!
टिम्मम

3
जाहिर है मुझे अपने शब्दों को खाना होगा - वे कहते हैं कि यह भविष्य के रिलीज में तय किया गया है!
टिम्मम 10

बहुत बहुत धन्यवाद टिम। यह अंतिम सही एक उत्तर होना चाहिए। मैंने बहुत समय खोजा है और आपके समाधान से बेहतर कुछ नहीं है! ”
tainy

क्या होगा अगर मुझे उपरोक्त StretchyImageView का उपयोग करते समय मैक्सहाइट सेट करने की आवश्यकता है। मुझे उसका कोई हल नहीं मिला।
tainy

17

True के लिए AdjustViewBounds सेट करना और LinearLayout दृश्य समूह का उपयोग करना मेरे लिए बहुत अच्छा काम किया। डिवाइस मेट्रिक्स को उप-लिंक या पूछने की आवश्यकता नहीं है:

//NOTE: "this" is a subclass of LinearLayout
ImageView splashImageView = new ImageView(context);
splashImageView.setImageResource(R.drawable.splash);
splashImageView.setAdjustViewBounds(true);
addView(splashImageView);

1
... या imageView एक्सएमएल संपत्ति का उपयोग कर - एंड्रॉयड: adjustViewBounds = "true"
अनातोलीय Shuba

उत्तम! यह बहुत आसान था और यह छवि को पूर्ण बनाता है। क्या यह उत्तर सही नहीं है? CustomView के साथ जवाब मेरे लिए काम नहीं किया (कुछ अजीब xml त्रुटि)
user3800924

13

मैं इस समस्या से एक या दूसरे रूप में एजीईएस के लिए संघर्ष कर रहा हूं, धन्यवाद, धन्यवाद, धन्यवाद। .... :)

मैं सिर्फ यह बताना चाहता था कि बॉब ली ने जो कुछ किया है उसे देखने और ऑनराइड को ओवरराइड करने से आप एक सामान्य समाधान प्राप्त कर सकते हैं। इस तरह से आप अपनी इच्छा के अनुसार इसका उपयोग कर सकते हैं, और अगर कोई छवि नहीं है तो यह नहीं टूटेगा:

    public class CardImageView extends View {
        public CardImageView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }

        public CardImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public CardImageView(Context context) {
            super(context);
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            Drawable bg = getBackground();
            if (bg != null) {
                int width = MeasureSpec.getSize(widthMeasureSpec);
                int height = width * bg.getIntrinsicHeight() / bg.getIntrinsicWidth();
                setMeasuredDimension(width,height);
            }
            else {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            }
        }
    }

2
सभी में से, इस समस्या के कई समाधान, यह पहला है जो सिर्फ एक ड्रॉप-इन समाधान है, जहां दूसरों को हमेशा कमियां होती हैं (जैसे बिना कोड री-राइट के रनटाइम में छवि को बदलने में सक्षम नहीं होना)। धन्यवाद!
मैकड

यह शुद्ध अजीब है - पिछले कुछ समय से इससे जूझ रहा है और xml विशेषताओं का उपयोग करने वाले सभी स्पष्ट समाधानों ने कभी काम नहीं किया है। इससे मैं अपने ImageView को विस्तारित दृश्य के साथ बदल सकता था और सब कुछ उम्मीद के मुताबिक काम कर रहा था!
slott

यह इस समस्या का सबसे अच्छा समाधान है।
एरलैंडो

यह बहुत अच्छा जवाब है। आप बिना किसी चिंता के xml फ़ाइल में इस वर्ग का उपयोग कर सकते हैं: <com.yourpackagename.CardImageView android: Layout_width = "fill_parent" Android: layout_height = "wra_content" Android: Background = "@ drawable / your_photo" />। महान!
arniotaki

11

कुछ मामलों में यह जादू सूत्र समस्या को खूबसूरती से हल करता है।

किसी अन्य प्लेटफ़ॉर्म से आने वाले किसी भी व्यक्ति के लिए, "फिट करने के लिए आकार और आकार" विकल्प को एंड्रॉइड में खूबसूरती से संभाला जाता है, लेकिन इसे ढूंढना मुश्किल है।

आप आमतौर पर इस संयोजन चाहते हैं:

  • चौड़ाई मिलान माता-पिता,
  • ऊंचाई लपेट सामग्री,
  • AdjustViewBounds चालू (sic)
  • स्केल फिटकेंटर
  • फसल कटाई बंद (सिक)

तब यह स्वचालित और अद्भुत है।

यदि आप एक iOS देव हैं, तो यह बेहद आश्चर्यजनक है कि बस एंड्रॉइड में, आप टेबल व्यू में "पूरी तरह से डायनेमिक सेल हाइट्स" कैसे कर सकते हैं .. गलत, मेरा मतलब है लिस्ट व्यू। का आनंद लें।

<com.parse.ParseImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/post_image"
    android:src="@drawable/icon_192"
    android:layout_margin="0dp"
    android:cropToPadding="false"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"
    android:background="#eff2eb"/>

यहां छवि विवरण दर्ज करें


6

मैं केवल इस XML कोड का उपयोग करके इसे प्राप्त करने में कामयाब रहा हूं। यह ऐसा मामला हो सकता है कि ग्रहण फिट होने के लिए इसे विस्तार करने के लिए ऊंचाई प्रदान नहीं करता है; हालाँकि, जब आप वास्तव में इसे किसी डिवाइस पर चलाते हैं, तो यह ठीक से प्रस्तुत करता है और वांछित परिणाम प्रदान करता है। (मेरे लिए कम से कम)

<FrameLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content">

     <ImageView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:adjustViewBounds="true"
          android:scaleType="centerCrop"
          android:src="@drawable/whatever" />
</FrameLayout>

क्षमा करें, यह काम नहीं करता है। यह चौड़ाई को मापता है, लेकिन सेंटरक्रॉप पहलू अनुपात को बनाए नहीं रखता है।
रिकोसिरेलेम

1
कई घंटों के बाद कस्टम क्लासेज़ के साथ संघर्ष करते हुए ImageView (जैसा कि कई उत्तरों और लेखों में लिखा गया है) और "निम्न वर्ग नहीं पाया जा सका" जैसा अपवाद होने पर मैंने उस कोड को हटा दिया। अचानक मैंने देखा कि मेरे ImageView में एक समस्या पृष्ठभूमि की विशेषता में थी! इसे बदल दिया गया srcऔर ImageView आनुपातिक हो गया।
कूलमाइंड

5

मैं एक रेखीय लयआउट के भीतर इन मूल्यों के साथ किया था:

Scale type: fitStart
Layout gravity: fill_horizontal
Layout height: wrap_content
Layout weight: 1
Layout width: fill_parent

क्या आप एक वास्तविक उदाहरण दे सकते हैं? मैं अपनी xml फ़ाइल में ये मान कहाँ डालूँ?
जॉन स्मिथ वैकल्पिक

5

हर कोई यह प्रोग्राम कर रहा है इसलिए मुझे लगा कि यह जवाब पूरी तरह से यहां फिट होगा। इस कोड ने मेरे लिए xml में काम किया। Im अभी तक अनुपात के बारे में नहीं सोच रहा था, लेकिन फिर भी यह जवाब देना चाहता था कि क्या यह किसी की मदद करेगा।

android:adjustViewBounds="true"

चीयर्स ..


3

एक बहुत ही सरल उपाय यह है कि इसके द्वारा दी गई सुविधाओं का उपयोग करें RelativeLayout

यहाँ xml है जो मानक Android के साथ संभव बनाता है Views:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        >
        <LinearLayout
            android:id="@+id/button_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_alignParentBottom="true"
            >
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
                android:text="button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
        <ImageView 
            android:src="@drawable/cat"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:layout_above="@id/button_container"/>
    </RelativeLayout>
</ScrollView>

चाल यह है कि आप ImageViewस्क्रीन को भरने के लिए सेट करते हैं लेकिन इसे अन्य लेआउट से ऊपर होना चाहिए। इस तरह आप अपनी जरूरत की हर चीज हासिल कर लेते हैं।


2

सेटिंग का अपना सरल मामला adjustViewBounds="true"और scaleType="fitCenter"छवि दृश्य के लिए XML फ़ाइल में!

<ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image"

        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        />

नोट: layout_widthपर सेट हैmatch_parent


1

आप ScaleType को ScaleType.FIT_XY में सेट कर रहे हैं। Javadocs के अनुसार , यह पूरे क्षेत्र को फिट करने के लिए छवि को बढ़ाएगा , यदि आवश्यक हो तो पहलू अनुपात को बदल देगा। यह आपके द्वारा देखे जा रहे व्यवहार को स्पष्ट करेगा।

आप जो व्यवहार चाहते हैं उसे पाने के लिए ... FIT_CENTER, FIT_START, या FIT_END करीब हैं, लेकिन अगर छवि लंबी है, तो यह चौड़ाई भरना शुरू नहीं करेगा। आप देख सकते हैं कि उन्हें कैसे लागू किया गया है, और आपको संभवतः यह पता लगाने में सक्षम होना चाहिए कि इसे अपने उद्देश्य के लिए कैसे समायोजित किया जाए।


2
मैंने FIT_CENTER की कोशिश की थी, लेकिन दूसरों की नहीं। दुर्भाग्य से वे या तो काम नहीं करते हैं, दोनों के साथ setAdjustViewBounds सच और झूठ के लिए सेट। क्या डिवाइस की स्क्रीन की पिक्सेल चौड़ाई, साथ ही डाउनलोड की गई छवि की चौड़ाई / ऊंचाई और मैन्युअल रूप से आकार सेट करने के लिए वैसे भी है?
फ्रेडले

1

ScaleType.CENTER_CROP वही करेगा जो आप चाहते हैं: पूरी चौड़ाई तक फैलाएँ, और उसके अनुसार ऊँचाई बढ़ाएँ। अगर स्केल की गई ऊंचाई स्क्रीन की सीमा से अधिक है, तो छवि क्रॉप हो जाएगी।


1

देखो आपकी समस्या का एक आसान समाधान है:

ImageView imageView;

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    imageView =(ImageView)findViewById(R.id.your_imageView);
    Bitmap imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image);
    Point screenSize = new Point();
    getWindowManager().getDefaultDisplay().getSize(screenSize);
    Bitmap temp = Bitmap.createBitmap(screenSize.x, screenSize.x, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(temp);
    canvas.drawBitmap(imageBitmap,null, new Rect(0,0,screenSize.x,screenSize.x), null);
    imageView.setImageBitmap(temp);
}

1

आप मेरे StretchableImageView का उपयोग पहलू और चौड़ाई के आधार पर (अनुपात या ऊंचाई द्वारा) संरक्षण योग्य और चौड़ाई के आधार पर कर सकते हैं:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

public class StretchableImageView extends ImageView{

    public StretchableImageView(Context context) {
        super(context);
    }

    public StretchableImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public StretchableImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if(getDrawable()!=null){
            if(getDrawable().getIntrinsicWidth()>=getDrawable().getIntrinsicHeight()){
                int width = MeasureSpec.getSize(widthMeasureSpec);
                int height = width * getDrawable().getIntrinsicHeight()
                            / getDrawable().getIntrinsicWidth();
                setMeasuredDimension(width, height);
            }else{
                int height = MeasureSpec.getSize(heightMeasureSpec);
                int width = height * getDrawable().getIntrinsicWidth()
                            / getDrawable().getIntrinsicHeight();
                setMeasuredDimension(width, height);
            }
        }
    }
}

0

मेरे लिए android: scaleType = "centerCrop" ने मेरी समस्या का समाधान नहीं किया। यह वास्तव में छवि के तरीके को और अधिक विस्तारित करता है। इसलिए मैंने एंड्रॉइड के साथ प्रयास किया: स्केल टाइप = "फिटएक्सवाई" और यह उत्कृष्ट काम किया।


0

यह मेरी आवश्यकता के अनुसार ठीक काम कर रहा है

<ImageView android:id="@+id/imgIssue" android:layout_width="fill_parent" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitXY"/>

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.