একটি ক্যানভাসে অঙ্কনযোগ্য চিত্র


উত্তর:


181

ক্যানভাসে একটি অঙ্কনযোগ্য আঁকার ভাল উপায় এটি নিজেই ডিকোড করছে না এটির জন্য এটি সিস্টেমে রেখে দেওয়া:

Drawable d = getResources().getDrawable(R.drawable.foobar, null);
d.setBounds(left, top, right, bottom);
d.draw(canvas);

এটি কেবল বিটম্যাপসই নয়, সমস্ত ধরণের অঙ্কনযোগ্যগুলির সাথে কাজ করবে। এবং এর অর্থ হ'ল যদি কেবল আকার পরিবর্তন হয় তবে আপনি আবার সেই একই অঙ্কনযোগ্যটি আবার ব্যবহার করতে পারেন।


ক্যানভাস পদ্ধতির সাথে অ্যানিমেশনের জন্য কীভাবে একটি অ্যানিমেশন-তালিকা (একাধিক ফ্রেম) ব্যবহার করা যায়?
রিচিএইচএইচ

4
খুব দরকারী! কমপক্ষে যখন আপনার প্রয়োজন কেবল কোনও রকেট বিজ্ঞানের সাথে ব্যাকগ্রাউন্ডের ছবি!
অসীম

@ রিচিএইচ, আমার সারফেসভিউতে আমার ব্যাকগ্রাউন্ড রয়েছে (সম্ভবত কোনও অপচয়) এবং পৃষ্ঠের দৃশ্যটি ফ্রেমলেআউটে এম্বেড করা আছে এবং সেই ফ্রেমলেটে ইমেজভিউ রয়েছে যা আমি তখন অ্যানিমেটেড করেছি - সম্ভবত এটি আপনার পক্ষে একটি বিকল্প?
এজেন্টকনফফ

4
getDrawable (আইডি) হ্রাস করা হচ্ছে, আপনি হয় উপরের কনটেক্সট কমপ্যাট কল, বা getDrawable (আইডি, থিম) কল ব্যবহার করা উচিত। বিকাশকারী.অ্যান্ড্রয়েড.
com

@ সাভিন: আপনি কি নিশ্চিত? আমি যতদূর মনে করতে পারি, এটি অ্যান্ড্রয়েডের প্রথম দিকের সংস্করণগুলি থেকে কাজ করার কথা।
গ্যাবার

39

আপনার ছবিটি বিটম্যাপ হিসাবে লোড করতে হবে:

 Resources res = getResources();
 Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.your_image);

তারপরে বিটম্যাপটি পরিবর্তনীয় করে তুলুন এবং এর উপর একটি ক্যানভাস তৈরি করুন:

Canvas canvas = new Canvas(bitmap.copy(Bitmap.Config.ARGB_8888, true));

তারপরে আপনি ক্যানভাসে আঁকতে পারেন।


যদি আমার .png বড় হয় এবং এটি লোড হওয়ার পরে কেটে যায়? অর্থাত্ আমি এটি ক্রপ করতে চাই না। এটি স্ক্রিনের চেয়ে বড় হতে পারে, তারপরে আমি এটিকে Zoomable এবং চলমান করার চেষ্টা করব। আমি কীভাবে এটি করতে পারি? আপনাকে অনেক অনেক ধন্যবাদ!
সিবস জুয়া

4
@ perfectionm1ng বিটম্যাপগ্রিজেনডেকোডার ব্যবহার করে দেখুন। এটি বড় চিত্রগুলির জন্য আংশিক লোডিংয়ের অনুমতি দেয়। সুতরাং আপনি এই মুহুর্তে যে চিত্রটি রেন্ডার করছেন তার কেবলমাত্র সেই অংশটিই লোড করতে সক্ষম হওয়া উচিত।
কনস্ট্যান্টিন বুড়ভ

আমার একই সমস্যাটি আমি ক্যানভাস সিএস = নতুন ক্যানভাস (বিটম্যাপ) কোডটি ব্যবহার করছি; রিসোর্সেস রেস = গেট রিসোর্সস (); বিটম্যাপ বিটম্যাপেক্স = বিটম্যাপফ্যাক্টরি.ডেকোড রিসোর্স (পুনরায়, আর। ডিড্রোয়েবল.ওরোলে_গুড_ফুল); বিটম্যাপ বিটম্যাপএক্সএক্স = বিটম্যাপফ্যাক্টরি.ডেকোড রিসোর্স (পুনরায়, আর.ড্রেব্যাবল.ওভারলে_বাদ_ফুল); যদি (text.equals ("ভাল")) s cs.drawBitmap (বিটম্যাপেক্স, 0, 0, টিপেইন্ট); } অন্য {cs.draw বিটম্যাপ (বিটম্যাপেক্সেক্স, 0, 0, টি পেইন্ট); }
আহমদ আরসলান

কীভাবে নতুন ক্যানভাস অবজেক্ট তৈরি করা অনড্রের ক্যানভাসে আঁকতে পারে?
সিদ্ধার্থ জি

14

এছাড়াও আপনি এইভাবে ব্যবহার করতে পারেন। এটি আপনার ক্যানভাসে আপনার বড় অঙ্কনীয় ফিটকে বদলে দেবে:

Resources res = getResources();
Bitmap bitmap = BitmapFactory.decodeResource(res, yourDrawable);
yourCanvas.drawBitmap(bitmap, 0, 0, yourPaint);

বিটম্যাপফ্যাক্টরি শ্রেণিতে পদ্ধতি নেই "বিটম্যাপফ্যাক্ট্রি.ডেকোডআরসোর্স (রিসোর্স, ড্রইবল);" ...
ক্রিসিক

@ ক্রিসিক আমি ধরে নেব যে yourDrawableএটি একটি পূর্ণসংখ্যা।

11
Drawable d = ContextCompat.getDrawable(context, R.drawable.***)
d.setBounds(left, top, right, bottom);
d.draw(canvas);

আমি জার্মআর রিসোর্স () দিয়ে ড্রয়যোগ্য তৈরি করি get getDrawable (id);
বিক্রম

getDrawable (আইডি) হ্রাস করা হচ্ছে, আপনি হয় উপরের কনটেক্সট কমপ্যাট কল, বা getDrawable (আইডি, থিম) কল ব্যবহার করা উচিত। বিকাশকারী.অ্যান্ড্রয়েড.
com

4
আমার জন্য এটি ব্যবহার করা দরকার ছিল setBounds। এটি ছাড়া কিছুই প্রদর্শিত হয় না।

8

এটা চেষ্টা কর

Bitmap mBitmap = Bitmap.createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter);

protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFAAAAAA);
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

        }

তবে আমি যদি ক্যানভাস.ড্রেউবিটম্যাপ (এমবিটম্যাপ, 0, 0, এমবিটম্যাপপেইন্ট) ব্যবহার করি; এটি কাজ করে এবং এটি ক্যানভাসে সংরক্ষিত চিত্রটি লোড করে, তবে একই সাথে কাজ করা বন্ধ এবং পূর্বাবস্থায় ফিরিয়ে আনুন, আমার কোড পেস্টবিন.
com

2
package com.android.jigsawtest;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class SurafaceClass extends SurfaceView implements
        SurfaceHolder.Callback {
    Bitmap mBitmap;
Paint paint =new Paint();
    public SurafaceClass(Context context) {
        super(context);
        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        canvas.drawBitmap(mBitmap, 0, 0, paint);

    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.