অ্যান্ড্রয়েডের বিটম্যাপ থেকে বিজ্ঞপ্তিযুক্ত ক্ষেত্রটি কীভাবে কাটবেন


108

আমার একটি বিটম্যাপ রয়েছে এবং আমি এই বিটম্যাপ থেকে একটি বিজ্ঞপ্তি অঞ্চল ক্রপ করতে চাই। বৃত্তের বাইরের সমস্ত পিক্সেল স্বচ্ছ হওয়া উচিত। কিভাবে আমি এটি করতে পারব?

এখানে চিত্র বর্ণনা লিখুন

উত্তর:


216

দীর্ঘ মন্ত্রমুগ্ধের পরে আমি সমাধানটি খুঁজে পেয়েছি

public Bitmap getCroppedBitmap(Bitmap bitmap) {
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
            bitmap.getHeight(), Config.ARGB_8888);
    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    // canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
    canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2,
            bitmap.getWidth() / 2, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    //Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false);
    //return _bmp;
    return output;
}

1
আপনি একটি বিজ্ঞপ্তি ক্লিপিং পাথের বিটম্যাপটি ক্লিপ করেও এটি করতে পারেন। আপনি যখনই বিটম্যাপটি আঁকেন প্রতিবারই এটি করতে পারেন, যার অর্থ আপনি কখনই স্বচ্ছ পিক্সেল সহ কোনও বিটম্যাপ তৈরি করতে চান না বা আপনি ক্লিপযুক্ত বিটম্যাপটি এমন একটি বাফারে আঁকতে পারেন যা আগেই স্বচ্ছ হয়ে যায়। আমি মনে করি এটির চেয়ে কিছুটা দ্রুত এবং সহজ হবে।
জিন

1
ধন্যবাদ। আপনার কোড দর্শনীয় কাজ করে। এখন আমি পথ (বহুভুজ) ব্যবহার করে ক্রপ করতে পারি।
প্রিয়ধ্রুভ

2
এই পদ্ধতিটি staticএকই স্ট্যাটিক পদ্ধতির একটি অ-ইনস্ট্যান্টিয়েটেড ইউটিলিটি শ্রেণিতে তৈরি এবং ব্যবহার করা যেতে পারে ।
ম্যাট লোগান 23

1
আপনি কি এখানে সর্বনিম্ন উচ্চতা এবং প্রস্থকে ব্যাসার্ধ হিসাবে 2 দ্বারা বিভক্ত করে ব্যবহার করবেন না? canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint);
ভারভারা কালিনিনা

3
এখানে 3 মূল পয়েন্ট রয়েছে: 1) একটি খালি বিটম্যাপ তৈরি করুন এবং একটি বৃত্ত আঁকুন। 2) এক্সফারমোডকে এসআরসিএনপিতে সেট করুন। 3) সেই ক্যানভাসের সীমানায় আসল বিটম্যাপ আঁকুন। সুতরাং, পেইন্টের রঙ এবং অন্যান্য ক্যানভাস অঙ্কন কোনও কাজের নয়।
লিম জোয়

44

আয়তক্ষেত্র থেকে বৃত্ত জেনারেট করা

public static Bitmap getCircularBitmap(Bitmap bitmap) {
    Bitmap output;

    if (bitmap.getWidth() > bitmap.getHeight()) {
        output = Bitmap.createBitmap(bitmap.getHeight(), bitmap.getHeight(), Config.ARGB_8888);
    } else {
        output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getWidth(), Config.ARGB_8888);
    }

    Canvas canvas = new Canvas(output);

    final int color = 0xff424242;
    final Paint paint = new Paint();
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());

    float r = 0;

    if (bitmap.getWidth() > bitmap.getHeight()) {
        r = bitmap.getHeight() / 2;
    } else {
        r = bitmap.getWidth() / 2;
    }

    paint.setAntiAlias(true);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawCircle(r, r, r, paint);
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
    canvas.drawBitmap(bitmap, rect, rect, paint);
    return output;
}

1
আমি স্বচ্ছ বৃত্তের কাট কাটা উপরে শীর্ষ চিত্রদর্শন সহ একটি ফ্রেমআলটে দুটি চিত্রদর্শন ব্যবহার করার পরামর্শ দেব।
ডিজেল

36

আপনি ব্যবহার করে আপনার চিত্রদর্শনটি বিজ্ঞপ্তি তৈরি করতে পারেন RoundedBitmapDrawable

বৃত্তাকার ইমেজভিউ অর্জনের জন্য কোডটি এখানে রয়েছে:

ImageView profilePic=(ImageView)findViewById(R.id.user_image);

//get bitmap of the image
Bitmap imageBitmap=BitmapFactory.decodeResource(getResources(),  R.drawable.large_icon);
RoundedBitmapDrawable roundedBitmapDrawable=RoundedBitmapDrawableFactory.create(getResources(), imageBitmap);

//setting radius
roundedBitmapDrawable.setCornerRadius(50.0f);
roundedBitmapDrawable.setAntiAlias(true);
profilePic.setImageDrawable(roundedBitmapDrawable);

এই v4 সমর্থন লাইব্রেরি বিকল্পটি দেখানোর জন্য ধন্যবাদ। আমি মনে করি না অন্যথায় আমি এটি সম্পর্কে জানতে পারতাম।
CFJ90210

8
এবং setCornerRadius (50.0f) এর পরিবর্তে setCircular (সত্য) ব্যবহার করে অঙ্কনযোগ্যকে একটি বৃত্ত তৈরি করে। দ্রষ্টব্য: চিত্রটি অবশ্যই বর্গক্ষেত্র হতে হবে বা দিকের অনুপাতটি ত্রুটিযুক্ত ...
মার্কো শ্মিটজ

31

@ জেন উপরের উত্তরে একটি মন্তব্য করেছিলেন যা ব্যবহারের পরামর্শ দিয়েছে clipPath কোনও চিত্রকে বৃত্ত হিসাবে ক্রপ করার জন্য বিকল্প হিসাবে ।

নিম্নলিখিত এটির একটি পরিষ্কার বাস্তবায়ন:

    public static Bitmap GetBitmapClippedCircle(Bitmap bitmap) {

        final int width = bitmap.getWidth();
        final int height = bitmap.getHeight();
        final Bitmap outputBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);

        final Path path = new Path();
        path.addCircle(
                  (float)(width / 2)
                , (float)(height / 2)
                , (float) Math.min(width, (height / 2))
                , Path.Direction.CCW);

        final Canvas canvas = new Canvas(outputBitmap);
        canvas.clipPath(path);
        canvas.drawBitmap(bitmap, 0, 0, null);
        return outputBitmap;
    }

এটি কোনও ইউটিলিটি ক্লাসে যুক্ত করা যেতে পারে।


4
আমি ঠিক খুব অনুরূপ কোড পোস্ট করতে চলেছি। সমস্যাটি বিকাশকারী.অ্যান্ড্রয়েড / গাইড / টপিক্স / অনুচ্ছেদ / হ্যান্ডওয়ার-এ্যাসেল এইচটিএমএল অনুসারে , ক্লিপপথটি হার্ডওয়্যার ত্বরণ দ্বারা সমর্থিত নয়। আমি আসলে একটি অ্যাপ্লিকেশনে সেই সমস্যায় পড়েছি এবং ভাবছি কি হচ্ছে। আরও নতুন হার্ডওয়্যার এটি ঠিক করতে পারে বলে মনে হচ্ছে (গুগল ট্যাবলেটগুলির মতো)। আপনার কোডে আরও সম্ভাব্য একটি পরিষ্কারকরণ: বিটম্যাপ আঁকার সময় আপনাকে রেক্ট-টু-রেকট রূপান্তরের প্রয়োজন হবে না। আপনি কেবল বলতে পারেন c.drawBitmap(b, 0, 0, null);, যা ডিফল্ট পরিচয় রূপান্তর ব্যবহার করে।
জিন

আপনি কীভাবে ক্লিপপথ ব্যবহার করে হার্ডওয়্যার ত্বরণ ব্যবহার করছেন?
স্পিডনিডমডস

আমি প্রথমে এই সমাধানটি আগে ব্যবহার করছিলাম তবে আউটপুটটিতে প্রান্তগুলি ঝাঁকুনিতে পড়েছিল। @ অ্যালতাফের সমাধান আরও ভাল কাজ করে
ডিরকোনিল

স্ট্যাটাস বারে বিজ্ঞপ্তিতে ব্যবহৃত চিত্রগুলি ক্রপ করার জন্য দুর্দান্ত কাজ করে
দামিয়ান পেটলা

14

আমি মনে করি এই সমাধানটি যে কোনও ধরণের আয়তক্ষেত্রের সাথে আরও ভাল কাজ করে, আপনি যদি চিত্রটি ছোট বা বড় চান তবে পিক্সেলের আকার পরিবর্তন করুন:

public static Bitmap getCircleBitmap(Bitmap bm) {

        int sice = Math.min((bm.getWidth()), (bm.getHeight()));

        Bitmap bitmap = ThumbnailUtils.extractThumbnail(bm, sice, sice);

        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(output);

        final int color = 0xffff0000;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);

        paint.setAntiAlias(true);
        paint.setDither(true);
        paint.setFilterBitmap(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawOval(rectF, paint);

        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth((float) 4);
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        return output;
    }

11

এটি প্রকৃত বিটম্যাপটি কাটা ছাড়াই এক্সএমএল-তে স্বাচ্ছন্দ্য হতে পারে, আপনার কেবল একটি বৃত্তাকার চিত্রের মুখোশ তৈরি করতে হবে এবং আপনার আসল চিত্রের উপরে স্থান দেওয়া দরকার। কোডটি ব্যবহার করা হয়েছে যা আমি ব্যবহার করেছি:

circle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="#00FFFFFF" android:endColor="#00FFFFFF"
        android:angle="270"/>
     <stroke android:width="10dp" android:color="#FFAAAAAA"/>

your_layout.xml (অ্যান্ড্রয়েড উপেক্ষা করুন: স্কেলটাইপ = "ফিট এক্সওয়াই" "যদি আপনার এটির প্রয়োজন না হয়)

<RelativeLayout

        android:id="@+id/icon_layout"
        android:layout_width="@dimen/icon_mask"
        android:layout_height="@dimen/icon_mask"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >

        <ImageView
            android:id="@+id/icon"
            android:layout_width="@dimen/icon"
            android:layout_height="@dimen/icon"
            android:layout_centerInParent="true"
            android:scaleType="fitXY" >
        </ImageView>

        <ImageView
            android:id="@+id/icon_mask"
            android:layout_width="@dimen/icon_mask"
            android:layout_height="@dimen/icon_mask"
            android:layout_centerInParent="true"
            android:background="@drawable/circle"
            android:scaleType="fitXY" >
        </ImageView>
    </RelativeLayout>

dimen.xml


<dimen name="icon">36dp</dimen>
<dimen name="icon_mask">55dp</dimen>

এখানে চিত্র বর্ণনা লিখুন

আউটপুট চিত্র দেখুন:

আশা করি, কারও পক্ষে এটি কার্যকর হতে পারে !!! :)


মনে হয় এটা কাজ শুধুমাত্র যদি ছবিটি একটি স্বচ্ছ পটভূমি যে বৃত্ত চেয়ে ছোট আছে ...
meeDamian

4
আপনি শুধু আরেকটি শীর্ষে একটি ImageView করা, এই একটি মাস্ক নয় :)
Climbatize

@Ash নিশ্চিত, তুমি ডান :) আমি শুধু যে এই ভাবে আপনি না সত্যিই "ফসল" আসল ইমেজ, মূল পোস্টার জিজ্ঞাসা যেমন;)
Climbatize

8

আপনি এই কোডটি ব্যবহার করতে পারেন, এটি কার্যকর হবে

 private Bitmap getCircleBitmap(Bitmap bitmap) {
        final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Bitmap.Config.ARGB_8888);
        final Canvas canvas = new Canvas(output);

        final int color = Color.RED;
        final Paint paint = new Paint();
        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);

        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        canvas.drawOval(rectF, paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);

        bitmap.recycle();

        return output;
    }

এটি অ্যান্ড্রয়েড এপিআই <২৮ এ ভাল কাজ করে তবে জাভা.এলং এর সাথে ক্র্যাশ হয়ে গেছে।ইলিজালআরগামেন্ট এক্সেপশন: সফ্টওয়্যার রেন্ডারিং অ্যান্ড্রয়েড ২৮ এ হার্ডওয়্যার বিটম্যাপ সমর্থন করে না
লুসিয়ান আইকব

7

আপনি এই কোডটি ব্যবহার করতে পারেন, এটি কার্যকর হবে

public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
    int targetWidth = 110;
    int targetHeight = 110;
    Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, 
            targetHeight,Bitmap.Config.ARGB_8888);

    Canvas canvas = new Canvas(targetBitmap);
    Path path = new Path();
    path.addCircle(((float) targetWidth - 1) / 2,
            ((float) targetHeight - 1) / 2,
            (Math.min(((float) targetWidth), 
                    ((float) targetHeight)) / 2),
                    Path.Direction.CCW);

    canvas.clipPath(path);
    Bitmap sourceBitmap = scaleBitmapImage;
    canvas.drawBitmap(sourceBitmap, 
            new Rect(0, 0, sourceBitmap.getWidth(),
                    sourceBitmap.getHeight()), 
                    new Rect(0, 0, targetWidth, targetHeight), new Paint(Paint.FILTER_BITMAP_FLAG));
    return targetBitmap;
}

3

bitmap.recycle()আপনার যদি আর প্রয়োজন না হয় তবে আমি যুক্ত করার পরামর্শ দিই , এটি আউটঅফিমারি ত্রুটি রোধ করবে।


3

এক্সটেনশন পদ্ধতিটি ব্যবহার করে এখানে কোটলিন বৈকল্পিক

/**
 * Creates new circular bitmap based on original one.
 */
fun Bitmap.getCircularBitmap(config: Bitmap.Config = Bitmap.Config.ARGB_8888): Bitmap {
    // circle configuration
    val circlePaint = Paint().apply { isAntiAlias = true }
    val circleRadius = Math.max(width, height) / 2f

    // output bitmap
    val outputBitmapPaint = Paint(circlePaint).apply { xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN) }
    val outputBounds = Rect(0, 0, width, height)
    val output = Bitmap.createBitmap(width, height, config)

    return Canvas(output).run {
        drawCircle(circleRadius, circleRadius, circleRadius, circlePaint)
        drawBitmap(this@getCircularBitmap, outputBounds, outputBounds, outputBitmapPaint)
        output
    }
}

2

পিপল যারা আয়তক্ষেত্রের কেন্দ্র চান (আমি), তাদের কাটার আগে এটি যুক্ত করুন:

    public static Bitmap cropBitmapToBlock(Bitmap bitmap) {
    if (bitmap.getWidth() >= bitmap.getHeight()){
        return Bitmap.createBitmap(
                bitmap,
                bitmap.getWidth()/2 - bitmap.getHeight()/2,
                0,
                bitmap.getHeight(),
                bitmap.getHeight()
        );
    }else{
        return Bitmap.createBitmap(
                bitmap,
                0,
                bitmap.getHeight()/2 - bitmap.getWidth()/2,
                bitmap.getWidth(),
                bitmap.getWidth()
        );
    }
} 

বিটম্যাপের অ্যান্ড্রয়েড ক্রপ সেন্টার


2

[জাচুম্বেলেচাও মন্টেকিল্লা] উত্তরের উপর ভিত্তি করে, এই কোডটি কোটলিন সমাধানের সন্ধানের জন্য লোকেদের কবিতার মতো কাজ করে:

fun cropCircleFromBitmap(originalBitmap: Bitmap): Bitmap {
    val size = Math.min(originalBitmap.width, originalBitmap.height)
    val bitmap = ThumbnailUtils.extractThumbnail(originalBitmap, size, size)
    var output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(output)
    val paint = Paint()
    val rect = Rect(0, 0, bitmap.width, bitmap.height)
    val rectF = RectF(rect)
    paint.isAntiAlias = true
    paint.isDither = true
    paint.isFilterBitmap = true
    canvas.drawARGB(0, 0, 0, 0)
    paint.color = 0xffff0000.toInt()
    canvas.drawOval(rectF, paint)
    paint.color = Color.BLUE
    paint.style = Paint.Style.STROKE
    paint.strokeWidth = 4f
    paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN);
    canvas.drawBitmap(bitmap, rect, rect, paint)
    return output
}

আপনি এটিকে এক্সটেনশন ফাংশনে রূপান্তর করতে পারেন
গ্রিনস্প্যান্ড

মজাদার মতো কিছু বিটম্যাপ.সেটকার্কেল ক্রপড বিটম্যাপ (): বিটম্যাপ {} এবং এটি আসলবিটম্যাপের পরিবর্তে ব্যবহার করুন
গ্রিনস্প্যান্ড

তারপরে আপনি এটির মতো এটি ব্যবহার করতে পারেন: img_user_photo.setImageBitmap (ফটো.টেট সার্কেল ক্রপড বিটম্যাপ ())
গ্রিনস্প্যান্ড

যেখানে ফটোটি বিটম্যাপ অবজেক্টটি ফাংশন সহ প্রসারিত করা হয়েছে
গ্রিনস্প্যান্ড

1

এখন, সঠিক উত্তর:

private Bitmap getCroppedBitmap(Bitmap bitmap, Integer cx, Integer cy, Integer radius) {
    int diam = radius << 1;
    Bitmap targetBitmap = Bitmap.createBitmap(diam, diam, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(targetBitmap);
    final int color = 0xff424242;
    final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    canvas.drawARGB(0, 0, 0, 0);
    paint.setColor(color);
    canvas.drawCircle(radius, radius, radius, paint);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
    canvas.drawBitmap(bitmap, -cx+radius, -cy+radius, paint);
    return targetBitmap;
}

1
সিএক্স এবং সাই কি?
কার্তিক চাগ

1
@ কে_7, এটি একটি বৃত্তের কেন্দ্র
মাস্টার

1

কোটিন ফুকশন

 fun getRoundedCornerBitmap(bitmap: Bitmap, pixels: Int): Bitmap {
            val output = Bitmap.createBitmap(bitmap.width, bitmap.height, Bitmap.Config.ARGB_8888)
            val canvas = Canvas(output)

            val color = -0xbdbdbe
            val paint = Paint()
            val rect = Rect(0, 0, bitmap.width, bitmap.height)
            val rectF = RectF(rect)
            val roundPx = pixels.toFloat()

            paint.isAntiAlias = true
            canvas.drawARGB(0, 0, 0, 0)
            paint.color = color
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint)

            paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)
            canvas.drawBitmap(bitmap, rect, rect, paint)

            return output
        }

এই কোড দ্বারা এটি কল

 holder.itemFriendImage.setImageBitmap(ImageConverter.getRoundedCornerBitmap(bitmap,600))

1

আমি বিশ্বাস করি সবচেয়ে সহজ সমাধান হ'ল আপনার বিটম্যাপের একটি বিটম্যাপ শেডার তৈরি করা, এটি আপনার পেইন্ট অবজেক্টে পাস করুন এবং তারপরে কেবল ক্যানভাস.ড্রেড সার্কেল (সিক্স, সাই, ব্যাসার্ধ, পেইন্ট) এর মতো কিছু কল করুন;

উদাহরণ স্বরূপ

Paint p = new Paint();
p.setShader(new BitmapShader(myBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
canvas.drawCircle(getWidth() / 2, getHeight() / 2, getHeight() / 2, p);

এইভাবে https://github.com/hdodenhof/CircleImageView এটিও করেছে, আপনি উত্স কোডটি এখানে পড়তে পারেন: https://github.com/hdodenhof/CircleImageView/blob/master/circleimageview/src/main/java /de/hdodenhof/circleimageview/CircleImageView.java


0
**Jst Add this to your image Id and get the circuler image.**

 imgUserProfile.setImageBitmap(getCircularCenterCropBitmap(bitmap, (int) (150 * denisty)));

Method:-

public void Bitmap getCircularCenterCropBitmap(Bitmap originalBmp, int diameter) {
        Bitmap resizedBmp = BitmapUtils.getScaledCroppedBitmap(originalBmp, diameter, diameter);
        return BitmapUtils.getRoundedCircularBitmap(resizedBmp, diameter / 2);
    }

-1

নিশ্চিত না যে এটি একটি প্রোগ্রামিং প্রশ্ন তবে ...

সবচেয়ে সহজ সমাধানটি হ'ল সোর্স বিটম্যাপে বাইরের অঞ্চলটি স্বচ্ছ করে তোলা। অন্যথায়, আপনাকে কোন পিক্সেল বৃত্তের বাইরে রয়েছে তা গণনা করতে হবে এবং সেই অনুযায়ী আলফা সেট করতে হবে (সম্পূর্ণ স্বচ্ছতার জন্য আলফা = 0)।


সত্যি বলতে কী, আমি তোমার পথে ছিলাম, মনে হচ্ছে এটি কাজ কিন্তু আমরা সীমান্তের ঝাঁকুনির সমস্যা সমাধান করতে পারি না, তাই না?
ভিন্সস্টাইলিং

সীমান্ত "jaggyness" হ্রাস এবং / অথবা antialiasing দ্বারা সম্বোধন করা হয়। গ্রহণযোগ্য বলে মনে হচ্ছে এমন কিছু করতে আপনি কিছু অ্যালগরিদমের জন্য অনলাইনে নজর রাখতে পারেন। তবে মনে রাখবেন যে আয়তক্ষেত্রাকার পিক্সেল এবং বক্ররেখা সর্বদা এই সমস্যাগুলি থাকবে।
মান্ডিসোডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.