ব্রাশ API

ইঙ্ক Brush এপিআই ক্যানভাসে আঁকার জন্য ব্রাশ তৈরি এবং কাস্টমাইজ করার একটি উপায় প্রদান করে।

একটি ব্রাশ তৈরি করুন

ব্রাশ তৈরি করতে, Brush.createWithColorLong() এর মতো নামযুক্ত আর্গুমেন্ট সহ Brush ফ্যাক্টরি পদ্ধতি ব্যবহার করুন। এই ক্লাসটি আপনাকে নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করতে দেয়:

  • family : ব্রাশের স্টাইল, টেক্সটের টাইপফেস বা ফন্টের অনুরূপ। উপলব্ধ BrushFamily মানগুলির জন্য StockBrushes দেখুন।
  • color : ব্রাশের রঙ। আপনি ColorLong ব্যবহার করে রঙ সেট করতে পারেন।
  • size : ব্রাশ দিয়ে তৈরি স্ট্রোকের বেস বেধ।
  • epsilon : স্ট্রোকের দুটি বিন্দুকে পৃথক বিবেচনা করা উচিত এমন ক্ষুদ্রতম দূরত্ব, যা স্ট্রোকের জ্যামিতির বিশদ বা বিশ্বস্ততার স্তর নিয়ন্ত্রণ করে।
    • উচ্চতর মান স্ট্রোককে আরও সহজ করে তোলে, যা কম মেমোরি ব্যবহার করে এবং দ্রুত রেন্ডার করে, কিন্তু জুম ইন করলে জ্যাগড এজের মতো দৃশ্যমান শিল্পকর্ম দেখা যেতে পারে।
    • উচ্চ-মানের জুমিংয়ের জন্য নিম্ন মানগুলি আরও বিশদ সংরক্ষণ করে, তবে মেমরির ব্যবহার বৃদ্ধি করে।
    • ১ পিক্সেল ইউনিট স্কেলের প্রোটোটাইপিংয়ের জন্য, ০.১ একটি ভালো সূচনা বিন্দু। বিভিন্ন স্ক্রিন ঘনত্ব সমর্থনকারী প্রোডাকশন অ্যাপের জন্য, ঘনত্ব-স্বাধীন ইউনিট (যেমন dp) ব্যবহার করুন এবং সেই অনুযায়ী এপসিলন সামঞ্জস্য করুন।
val redBrush = Brush.createWithColorLong(
  family = StockBrushes.pressurePen(),
  colorLong = Color.RED.pack(),
  size = 5F,
  epsilon = 0.1F
)

ব্রাশের বৈশিষ্ট্য পরিবর্তন করুন

আপনি copy() পদ্ধতি ব্যবহার করে একটি বিদ্যমান ব্রাশের একটি কপি তৈরি করতে পারেন। এই পদ্ধতিটি আপনাকে ব্রাশের যেকোনো বৈশিষ্ট্য পরিবর্তন করতে দেয়।

val blueBrush = redBrush.copy(colorLong = Color.BLUE.pack())

কাস্টম ব্রাশ

StockBrushes সাধারণ ব্রাশের একটি বহুমুখী সেট প্রদান করলেও, ইঙ্ক এপিআই অনন্য শৈল্পিক প্রভাবের জন্য সম্পূর্ণ নতুন ব্রাশ আচরণ তৈরি করার জন্য বা পশ্চাদপট সামঞ্জস্যের জন্য নির্দিষ্ট বিদ্যমান ব্রাশগুলির প্রতিলিপি তৈরি করার জন্য একটি উন্নত পথও প্রদান করে।

একটি কাস্টম BrushFamily তার সিরিয়ালাইজড ফর্ম্যাট থেকে লোড করা হয়। প্রয়োজনীয় ফর্ম্যাট হল ব্রাশফ্যামিলি প্রোটোকল বাফারের জিজিপড বাইনারি এনকোডিং। এটি আপনাকে আজ কাস্টম ব্রাশ ফাইল লোড এবং ব্যবহার করতে দেয়। একবার ডিসিরিয়ালাইজড হয়ে গেলে, কাস্টম BrushFamily ব্যবহার করে একটি নির্দিষ্ট রঙ এবং আকারের একটি নতুন Brush তৈরি করা যেতে পারে, ঠিক যেকোনো StockBrushes পরিবারের মতো।

class CustomBrushes(val context: Context) {

  private const val TAG = "CustomBrushes"

  val brushes by lazy { loadCustomBrushes(context) }

  @OptIn(ExperimentalInkCustomBrushApi::class)
  private fun loadCustomBrushes(): List<CustomBrush> {
    val brushFiles = mapOf(
        "Calligraphy" to (R.raw.calligraphy to R.drawable.draw_24px),
        "Flag Banner" to (R.raw.flag_banner to R.drawable.flag_24px),
        "Graffiti" to (R.raw.graffiti to R.drawable.format_paint_24px),
    // ...
    )

    val loadedBrushes = brushFiles.mapNotNull { (name, pair) ->
      val (resourceId, icon) = pair
      val brushFamily = context.resources.openRawResource(resourceId).use
      { inputStream ->
          BrushFamily.decode(inputStream)
      }
      CustomBrush(name, icon, brushFamily.copy(clientBrushFamilyId = name))     
    }
    return loadedBrushes
  }
}

data class CustomBrush(
  val name: String,
  val icon: Int,
  val brushFamily: BrushFamily
)