خانه » ادوبی فلش » اعمال افکت blur به BitmapData در اکشن اسکریپت ۳

اعمال افکت blur به BitmapData در اکشن اسکریپت ۳

اعمال افکت blur به BitmapData در اکشن اسکریپت ۳

در این مطلب می خواهیم به روشی ساده برای اعمال افکت blur به یک شی از نوع BitmapData بپردازیم. توجه داشته باشید این نوع اعمال افکت با افکت ها و Filterهای معمول فلش متفاوت هست و بر روی خود BitmapData اعمال می شود و نه بر روی MovieClip ی که تصویری در آن قرار دارد.


دانلود سورس
یک پروژه جدید در نرم افزار ادوبی فلش ایجاد نمایید و یک تصویر را وارد برنامه کنید (Ctrl+R) در این مثال ما از تصویر زیر استفاده کرده ایم.

و کلاس های مورد نیاز را import می کنیم :

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.geom.Point;

در مرحله بعد تابعی با نام blurApply ایجاد می کنیم و آرگمان آن را bmd و از نوع BitmapData قرار می دهیم.

function blurApply(bmd:BitmapData):BitmapData
{
	var effectBlur:BlurFilter = new BlurFilter(4,4,3);
	var rect:Rectangle = new Rectangle(0,0,bmd.width ,bmd.height );
	var point:Point = new Point(0,0);

	bmd.applyFilter(bmd , rect , point , effectBlur);

	return bmd;
}

در این تابع ابتدا یک متغیر با نام effectBlur می سازیم و نوع آن را BlurFilter قرار می دهیم و یک نمونه از کلاس BlurFilter را ایجاد می کنیم ، آرگمان های ورودی این کلاس سه مورد می باشد که دو مورد اول برای ایجاد افکت blur در طول و عرض می باشد و مورد سوم مربوطه به کیفیت این افکت که بر روی شی ما اعمال می شود.

در خط بعد ما یک متغیر از نوع Rectangle با نام rect ایجاد می کنیم ایم متغیر در واقع وظیفه مشخص کردن محدوده ای می باشد که قرار است افکت بر روی آن اعمال شود به همین دلیل دو مقدار اولیه که x, y می باشند و محل شروع را مشخص می کنند با ۰ و ۰ مقدار دهی شده اند و دو مقدار بعدی که مربوطه به عرض و طول می باشند با عرض و طول BitmapData که آرگمان ورودی این تابع می باشد مقدار دهی شده اند.

در خط بعد یک Point نیز با مقدار ۰,۰ ایجاد می کنیم که مشخص کننده گوشه سمت چپ و بالایی شی می باشد. به جای این بخش می توانیم از rect.topLeft نیز استفاده کنیم.

در خط بعد توسط applyFilter اقدام به اعمال افکت بر روی شی خود می نماییم، این متد مربوطه به BitmapData می باشد و آرگمان های ورودی آن به ترتیب مربوطه به شی BitmapData و محدوده مشخص کننده ، point و افکت تعریف شده ، می باشد.

تغییرات مورد نظر ما در این تابع بر روی bmd انجام شده است ، حال bmd را به عنوان مقدار بازگشتی تابع در خط آخر تابع return می کنیم.

تا این مرحله تابع مورد نظر ما ایجاد شد ، حال به نحوه استفاده آن می پردازیم. تصویری که در ابتدا در پروژه وارد کردیم را از stage حذف می کنیم به بخش Library می رویم و AS Linkage آن را با  MyPic مقدار دهی می کنیم.

حال یک متغیر با نام myPic و از نوع MyPic ایجاد می کنیم و آن را با یک نمونه از MyPic مقدار دهی می کنیم.

var myPic:MyPic = new MyPic();//دریافت تصویر از کتابخانه

سپس یک متغیر با نام bit می سازیم و آن را از نوع کلاس Bitmap قرار می دهیم و یک نمونه از کلاس Bitmap را به آن نسبت می دهیم در آرگمان اول مربوطه با کلاس Bitmap مقدار myPic را وارد می کنیم.

var bit:Bitmap = new Bitmap(myPic);

در مرحله بعد نیز خصوصیت BitmapData مربوطه به متغیر bit را توسط تابع ایجاد شده مقدار دهی می کنیم.

bit.bitmapData = blurApply(bit.bitmapData);
addChild(bit);

و در آخر نیز bit را توسط addChild به شی نمایشی (DisplayObject) اضافه می کنیم تا در صفحه نمایش داده شود.

نتیجه به این شکل خواهد بود :

حال اگر در تابع در بخش rect که مربوطه به محدوده ای می باشد که افکت بر روی آن اعمال می شود ، مقدارهای عرض و طول را تقسیم بر ۲ کنیم در واقع افکت بر روی یک چهارم تصویر اعمال می شود.

function blurApply(bmd:BitmapData):BitmapData
{
	var effectBlur:BlurFilter = new BlurFilter(4,4,3);
	var rect:Rectangle = new Rectangle(0,0,bmd.width/2 ,bmd.height/2 );
	var point:Point = new Point(0,0);

	bmd.applyFilter(bmd , rect , point , effectBlur);

	return bmd;
}

و نتیجه خروجی به این شکل خواهد بود :

شما این امکان را دارید که با مقدار دهی دو آرگمان اول rectangle در بخش نمایشی تصویر جا به جایی ایجاد کنید و توسط مقدار دهی دو آرگمان point مختصات محل نمایش بخشی که افکت بر روی آن اعمال شده را تغییر دهید.

در پایان تمام کدهایی که برای این پروژه نیاز می باشد را در زیر قرار می دهیم:

import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.geom.Rectangle;
import flash.geom.Point;

function blurApply(bmd:BitmapData):BitmapData
{
	var effectBlur:BlurFilter = new BlurFilter(4,4,3);
	var rect:Rectangle = new Rectangle(0,0,bmd.width ,bmd.height);
	var point:Point = new Point(0,0);

	bmd.applyFilter(bmd , rect , point , effectBlur);

	return bmd;
}

var myPic:MyPic = new MyPic();//دریافت تصویر از کتابخانه
var bit:Bitmap = new Bitmap(myPic);

bit.bitmapData = blurApply(bit.bitmapData);
addChild(bit);


دانلود سورس

Print Friendly
تگ ها :
پیوند مطلب قبلی
پیوند مطلب بعدی

درباره بهروز پولادرگ

متولد : ۵ مرداد سال ۱۳۶۷ ، حرفه : ادوبی فلش ، برنامه نویسی و طراحی وب ، طراحی گرافیک ، مالتی مدیا ، نرم افزار های تحت وب

17 نظر

  1. سلام بهروز جان…
    یه سری به لینک زیر بزن
    http://iranwebfestival.com/fa/page/lg-smart-tv-guide
    _____________
    این آموزشت هم خوب بود… فقط نمیشه بهش گرادیانت داد که مرز مشخصی نداشته باشه؟
    منظورم رو که فهمیدی؟

    • سلام ، بله اون امکان هم وجود داره که بعدا دربارش کامل در یک مطلب مجزا توضیح می دهم.
      اون لینک رو هم ممنون که ارسال کردید ، البته قبلا هم دیده بودم با تشکر از اطلاع و لطف شما.

      موفق و پیروز باشید.

  2. سلام آقا بهروز
    کارت درسته واقعا، خیلی از مطالب مفید وبلاکت استفاده کردم.
    دوتا سوال داشتم : ۱- در یکی از کامنت ها برای دوستی توضیح داده بودی که چطور توی منوی راست کلیک اسم خودش رو بگذاره (دقیقا مثل header وبلاگ خودت) البته من برای اکشن ۳ میخوام. اگر امکان داره کدش رو بهم بده لطفا.
    ۲- چطور میشه یک آهنگ رو طوری برای بکگراند گذاشت که وقتی به انتها میرسه کسی که گوش میده متوجه نشه که این آهنگ از تکرار یک آهنگ ۱۰ ثانیه ای هست. چون در بیشتر مواقع وقتی به انتهای آهنگ میرسه یک مکث بوجود میاد و دوباره تکرار میشه.
    ممنون

    • سلام ، شما لطف دارید دوست گرامی
      در مورد سوال اولتون به کد زیر توجه کنید:

      var my_menu:ContextMenu = new ContextMenu();
      my_menu.hideBuiltInItems();
      
      var my_copyright = new ContextMenuItem("Copyright - IFLashLord.com");
      
      my_copyright.enabled = true;
      my_copyright.separatorBefore = true;
      
      function openLink(e:ContextMenuEvent):void{
      navigateToURL(new URLRequest("http:// flashlord.com"));
      }
      my_copyright.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, openLink);
      
      my_menu.customItems.push( my_copyright);
      
      contextMenu = my_menu;
      

      در مورد سوال دوم ، به بخش آموزش های مربوطه به صداها مراجعه کنید (مقالات آموزشی) ، شما می توانید تعداد تکرار را مثلا ۹۹۹۹ قرار دهید و یا در رویداد پایان فرمان پخش دوباره را بدهید
      البته توجه کنید که فایل صوتی شما هم می بایست ویرایش شود تا فضای خالی در آخر نداشته باشد و البته امکان loop کردن داشته باشد ، مثلا ابتدا و انتها اوج یکسانی داشته باشد

      موفق و پیروز باشید

      • سلام آقا بهروز
        ممنون ، خیلی بکارم اومد.
        من تازه دارم فلش رو یادمیگیرم. تو iflashlord.com کار زیبای شما رو دیدم که خواستم منم روش کار کنم. لطفا اگر میشه راهنماییم کنید.
        ۱- لودینگی که ساختید وقتی ۱۰۰ درصد میشه با یک افکت خیلی جالبی میره. این رو با اکشن ۳ چطوری میشه ساخت؟
        ۲- وقتی صفحه اول اجرا میشه با افکت fade هست و صفحات با همین افکت عوض میشه (نوشته ها). این رو هم میخواستم بدونم چطوری میشه به صفحات در فلش افکت داد؟
        ۳- منوهای بالای سایت وقتی ماوس روش میره افکتش عوض میشه. راجع به اینم راهنماییم کنید که چطور به منو افکت بدم؟
        ۴- وقتی روی منوهای بالا کلیک میشه آدرس صفحه در آدرس بار ظاهر میشه. اینم برام خیلی جالبه. معمولا توفلش همه تو یک صفحه هست.
        کلا انقدر سایت شما جالبه که یک مبتدی مثل من سوالاتش زیاد میشه. ببخشید خلاصه.

        • سلام
          مورد اول توسط افکت الاستیک مربوطه به Tweener ها می توان این کار را کرد ، می توانید در مورد توینر ها و Ease های مربوطه به آنها جستجویی داشته باشید
          در مورد دوم خصوصیت alpha مربوطه به این موضوع می باشد که توسط همان توینر ها می توانید این خصوصیت را به صورت انیمیت کم و زیاد کنید
          این مورد استفاده از Filterهای فلش هست که با افکت Blur می توانید چیزی شبیه به این درست نمایید
          مورد آخر مربوط میشه به کتابخانه swfAddress که اگر نام آن را جستجو کنید نمونه های آماده آن برای اکشن ۲ و ۳ را خواهید یافت.

          موفق و پیروز باشید

  3. با سلام خسته نباشید . آقا من ایمیل شمارو پیدا نکردم مشکلمو اینجا نوشتم شاید کمکی کرده باشید
    من میخوام یک فلش گیم بدون ادیت کردن اولش مثل mochimedi لودر بسازم تبلیغات هم وسطش نشد مشکلی نیست اما مثل اون می خوام لودر اقتصاصی درست کنم اگه میشه کمکم کنید لطفا به صورت ساده بگید من مبتدی هستم منتظر جواب شما هستم از ایمیل یا از پست یا نظرات

    • سلام دوست گرامی
      برای ارتباط اختصاصی می توانید از بخش ارتباط با ما استفاده نمایید

      در مورد Loader در برنامه نویسی اکشن ۲ و سه تفاوت وجود دارد
      ولی در کل یک کد ساده دارد که می توانید با جستجوی Flash Loader in AS3 موارد زیادی از آموزش ها و سورس های آماده را برای اکشن اسکریپت ۳ و همچنین ۲ پیدا نمایید

      حال می توانید با ویرایش و ساخت یک قالب مورد نظرخودتان از آن به عنوان لودر اختصاصی برای کارهای خودتان استفاده کنید
      در مورد تبلیغات در سایت های تبلغاتی مثل گوگل و … کدهایی برای قرار دادن تبلیغشان در فلش دارند که می بایست آن را از سایت مورد نظراتان دریافت کنید
      اگر از سایت خاصی استفاده نمی کنید کافیست که file مربوطه به تبلیغ را در فلش load نمایید که این مورد هم کار ساده ای است

      در مورد وقفه ای که تا امکان play شدن mochimedia ایجاد می شود هم می توانید از setInterval و یا کلاس Timer در اکشن اسکریپت۳ استفاده کنید

      در ضمن در صورتی که در مورد هر کدام از روش ها برای اجرا مشکل دارید می توانید در گوگل و یا همین جا جستجو کنید و موارد مورد نظر خود را بیاموزید

      موفق و پیروز باشید

  4. سلام می خواستم بدونم چطور می شه خروجی کارو بدون قاب فلش پلیر دید؟
    مثلا تو ابعاد ۸۰۰*۶۰۰

    • سلام فکر می کنم منظور شما برای فایل های swf هست ، که برای این کار می بایست توسط نرم افزارهایی مثل MDM Zinc فایل swf را به exe تبدیل کنید این برنامه و برنامه های مشابه این دست ، امکان حذف قالب پنجره را به صورت کامل به شما می دهند و امکانات بسیار زیاد دیگر مثل تغییر رزولوشن و تمام صفحه و …
      موفق و پیروز باشید

  5. سلام ببخشید چطوری راست رو
    Flash8Portable
    ویرایش کنم
    کد
    داره یا
    چی؟
    مثال پاک کردن-اضاف کردن کپی رایت با سایت کپی رایت

    لطفا اگه میشه کمک کنید؟

  6. سلام میشه کد لینک دادن به دکمه یا بنر فلش و کد کپی رایت(راست کلیک روی بنر) رو برای اکشن اسکریپت ۲ بزارید خیلی احتیاج دارم هرچه تو مطالب وبلاگ گشتم پیدا نکردم لطفا راهنماییم کنید.من منتظر جواب هستم.
    با تشکر.

    • سلام
      این یک نمونه ساده برای این کار در اکشن اسکریپت ۲ هست

      var myMenu_cm:ContextMenu = new ContextMenu();
      myMenu_cm.hideBuiltInItems();
      
      var newItem1_cmi = new ContextMenuItem ("Contact Us", contactPage);
      function contactPage (){
      trace("my email is blue_chi at oman3d dot com")
      }
      var newItem2_cmi = new ContextMenuItem ("Oman3D.com - All Rights Reserved", noFun);
      function noFun(){
      }
      newItem2_cmi.enabled = false;
      newItem2_cmi.separatorBefore = true;
      
      myMenu_cm.customItems.push(newItem1_cmi,newItem2_cmi);
      
      _root.menu = myMenu_cm;
      

      موفق و پیروز باشید

  7. با سلام، برای خروجی گرفتن تصویر صفحه در flash چه دستوری در actionsript3وجود دارد ؟

    • سلام می بایست از کلاسی که برای این کار نوشته شده است استفاده کنید
      JPGEncode فکر کنم اسمش بود ، با جستجو به کلاس و … آن درسترسی داشته باشید
      نمونه ای هم در بخش آموزشه ها هست که به این مورد اشاره دارد
      موفق و پیروز باشید

ارسال جواب

آدرس رایانامه شما منتشر نخواهد شد.فیلد های اجباری علامت گزاری شده اند *

*

رفتن به بالای صفحه