امتحان کردم از اونجایی که خود رندر هم مشکی هست مقداری از اون هم پاک میشه
راه دیگه ای نداره؟
چرا داره، به شرطی که بتوانید دو تا رندر مجزا بگیرید، یکبار با زمینه کاملا مشکی و یکبار با زمینه کاملا سفید.
یه کمی وارد بحث ریاضیات و فرمول بشیم :
رنگ هر نقطه از تصویر از دو بخش تشکیل میشه، یکی رنگ (مثلا c) و یکی میزان شفافیت (مثلا a)
وقتی تصویر نیمه شفاف روی یک زمینه با رنگ b نمایش داده بشه، رنگ تصویر و زمینه با هم ترکیب میشه و فرضا میشه رنگ x با فرمول (x = c * a + b * (1 - a
رنگ مشکی 0 ئه، به همین جهت b توی فرمول میشه 0، پس x = c * a
شما الان ترکیب تصویر و زمینه رو دارید پس x رو داریم ولی c و a الان هر دو برای ما مجهول اند و نمی توانیم از روی x پیداش کنیم.
اما وقتی شما یک رندر دیگه هم اینبار با رنگ سفید بگیرید قضیه فرق می کنه. رنگ سفید خودش 1 ئه و فرضا وقتی با رنگ سفید رندر می گیرید
ترکیب تصویر و زمینه میشه y . توی فرمول اینبار b برابر 1 خواهد بود یعنی (y = c * a + 1 * (1 - a
ما از فرمول قبلی x = c * a رو داریم، در فرمول دوم بجای c * a مقدار x که معلومه قرار می دهیم، میشه (y = x + 1 * (1 - a
توی این فرمول حاصل مجهول فقط a است که بدست میاد a = x - y + 1
و وقتی توی فرمول x = c * a قرارش بدهیم c هم بدست میاد (c = x / (x - y + 1
حالا اینو من از کجا می دونم؟ من موقعی که برای ویندوز ظاهر و Skin طراحی می کردم لازم بود که یکسری نمونه نیمه شفاف از دکمه ها
و کنترل های ویندوز داشته باشم که در دسترس نبود. یکبار روی زمینه سفید و یکبار روی زمینه مشکی قرارشون می دادم و با پردازش
تصویر ایندو تا هم لایه تصویر و هم لایه Mask نیمه شفاف اش رو بدست می آوردم.