آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

تفاوت بین Drawable و Bitmap در برنامه نویسی اندروید

اگر با عکس ها در برنامه نویسی اندروید کار کرده باشید، مشاهده کردید که اغلب با دو حالت Drawable و Bitmap سر و کار داریم.

باید دقت داشت که Bitmap زیرمجموعه ای از Drawable است (البته از نظر مفهوم، در ادامه شرح خواهیم داد که در برنامه نویسی اندروید، قبل از نمایش یک Bitmap، آن را به BitmapDrawable تبدیل می کنند که زیرمجموعه ای از Drawable است). در واقع، Bitmap یک عکس با فرمت PNG یا JPEG یا ... است، اما Drawable شامل تمام مواردی است که قابل رسم کردن می باشند (یعنی شامل Bitmap نیز می باشد). در اکثر موارد، آنچه که از آن به عنوان Bitmap برای نمایش عکس در برنامه نویسی اندروید نام می بریم، همان BitmapDrawable می باشد.

برای Drawable در برنامه نویسی اندروید، کلاس (class) زیر را داریم :


android.graphics.drawable.Drawable

برای BitmapDrawable در برنامه نویسی اندروید، کلاس (class) زیر را داریم :


android.graphics.drawable.BitmapDrawable

برای بیان تفاوت بین Drawable و Bitmap ، بهتر است در مورد روش های نمایش عکس در یک Imageview صحبت کنیم. برای تعیین عکس برای یک Imageview ، به یکی از 4 روش زیر می توانیم اقدام کنیم :


1- setImageDrawable(Drawable drawable)
2- setImageBitmap(Bitmap bm)
3- setImageResource(int resId)
4- setImageURI(URI uri)

وقتی از setImageBitmap استفاده می کنیم، ابتدا Bitmap به BitmapDrawable تبدیل می شود و سپس setImageDrawable فراخوانده می شود. این مسئله را از روی کدهای setImageBitmap می توان متوجه شد :


public void setImageBitmap(Bitmap bm) {
    setImageDrawable(new BitmapDrawable(mContext.getResources(), bm));
}

اگر در مورد setImageResource و setImageURI نیز کمی تحقیق کنید، متوجه خواهید شد که آنها برای ساخت یک Bitmap از روی یک مسیر (path) یا Uri و یا فایل منبع (resource file) به کار می روند. بنابراین این دو مورد نیز همانند setImageBitmap می باشند و در کل، می توان نتیجه گرفت که این سه تابع، بر اساس تابع setImageDrawable هستند.

چنانچه بخواهیم انواع دیگری از Drawable (به غیر از Bitmap ، یا در واقع به غیر از BitmapDrawable) را در یک Imageview نمایش بدهیم، باید از خود تابع setImageDrawable استفاده کنیم.

کلمه Bitmap خود از دو کلمه بیت (Bit) و نقشه (Map) تشکیل شده است و همین دو کلمه، ساختار آن را بیان می کند. یعنی مثلا وقتی شما یک عکس 16 در 16 پیکسل دارید، اگر آن را به صورت Bitmap داشته باشید، یعنی آن عکس به صورت تعداد ((16 ضرب در 16 ضرب در n)) مقدار برای پیکس های عکس، ذخیره شده است (برای هر پیکسل ، n مقدار). این مقادیر به صورت آرایه ای از بیت ها (bit array) ذخیره می شوند (هر بیت هم که یعنی مقدار 0 یا 1). مثلا فرمت PNG که برای عکس به کار می رود، یک Bitmap می باشد (n=3).

کلمه Drawable هم از دو کلمه draw و able تشکیل شده است که در مجموع، به معنای ((قابل رسم کردن)) می باشد. قبل از اینکه اصطلاحات ما را گیج کنند، باید بگویم که دو اصطلاح ((Bitmap Drawables)) و ((Vector Drawables)) را داریم که در برنامه نویسی اندروید، ((Bitmap Drawables)) را BitmapDrawables می نامیم و به ((Vector Drawables)) ، به طور خلاصه، Drawables می گوییم (این مورد تذکر داده شد تا اگر بعدا با اصطلاحات دیگری برخورد کردید، این اصطلاحات گیجتان نکند). بگذارید به زبان ساده بگویم، فرض کنید که ما قصد داریم که عکسی شامل یک دایره داشته باشیم، اگر بخواهیم مطابق تعریف Bitmap ها عمل کنیم، باید اطلاعات مربوط به تعداد زیادی پیکسل را داشته باشیم، اما می توانستیم یک جور دیگر نیز اطلاعات مربوط به عکس دایره را ذخیره کنیم و آن این است که مختصات نقطه مرکز دایره و همچنین شعاع دایره را به عنوان اطلاعات ذخیره کنیم، بنابراین با کمی پردازش، می توان عکس را ساخت و نیاز به ذخیره و بازیابی اطلاعات مربوط به تعداد زیادی پیکسل نیز نمی باشد. می توان گفت که Drawable به این صورت عمل می کند و به جای اینکه بر اساس اطلاعات تعداد زیادی پیکسل باشد، با یک سری بردار (vector)، عکس های (images) آماده و متن (text)، عکس نهایی را می سازد. بنابراین مشاهده می کنید که در Drawable ، حتی متن ها را هم می توان به عکس اضافه نمود (کار با چندین لایه از عکس، رسم خط و دایره و ... و به کار بردن متن و اعمال خیلی از انواع تغییرات بر روی عکس).

نویسنده علیرضا گلمکانی
شماره کلید 2251
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 1 1 0
سعید
۱۳۹۵/۰۵/۲۵
۲۱:۴۵

سلام. برای چاپ متن بر روی عکس چکار باید کرد؟

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)