حكاية الأيقونات القديمة. اللغز 18 لونا. ألوان شفافة وعكسية

قليل من الناس الآن لا يهتمون بالكيلوبايت الإضافي أو اثنين. ولكن هناك مثل هؤلاء الناس ، وقد كُتبت هذه المذكرة لمجرد شخص مهووس من شخص. )

في تلك الحالات المعزولة عندما كنت بحاجة إلى تسجيل أيقونة معبرة (.ico) للتطبيق وفي نفس الوقت كان علي حفظ وحدات البايت ، استخدمت الاختراق التالي: لقد سجلت الصورة في وضع 16 لونًا - ولكن! - ليس في اللوحة الثابتة المعتادة ، ولكن في اللوحة التكيفية.

ماذا يعطي؟ الرمز 48 × 48 ، شفافية 1 بت ، 256 لونًا = 3774 بايت ، وهو أيضًا في 16 لونًا = 1662 بايت. الكسب هو 2 كيلو بايت ، مع انخفاض طفيف في جودة الصورة.



مثال. من اليسار الى اليمين:

  • 256 لون أصلي
  • لوحة قياسية ذات 16 لونًا ثابتة (وهنا التقطت فتحة لبضع دقائق حتى تكون الصورة على الأقل ذات مظهر لائق)
  • لوحة الألوان 16 التكيف + الفقس (التردد).

كيف يعمل؟ من الغريب أن أيقونة 16 لونًا تحمل دائمًا لوحة. أي أن 99.9٪ من الرموز القديمة تحمل نفس جدول الألوان 64 بايت (4 بايت لكل لون). ونعم - اتضح أنه يمكن إعادة برمجته.

لسوء الحظ ، لست على دراية بالبرنامج ، والذي يمكن أن يعمل بشكل كامل مع هذه الرموز. لذلك ، إليك وصفة كيفية "إنشاء رمز" أدنى: خذ IrfanView ، أو حمّل صورة فيه: إما 16 لونًا معدة مسبقًا ، أو قلل عدد الألوان فيها: القائمة - الصورة - تقليل عمق اللون ... - 16 لونًا. الآن: القائمة - حفظ باسم ... - حدد تنسيق .ico. هل هذا كل شيء؟ لا ، ليس جميعًا: لا تعرف Irfan View كيفية العمل بشفافية ؛ يجب استعادتها يدويًا في برنامج آخر. يمكن لـ Microangelo Studio تحميل وتحرير مثل هذه الرموز (للأسف ، لا يسمح بإنشاء مثل هذه المكتبة من البداية ، تمامًا مثل إنشاء مثل هذه الرموز من البداية). نقوم بتحميل الرمز في Microangelo و ... ربما سنستقبل على الفور نافذة تحذير حول "اللوحة غير الصحيحة" - ما يعنيه هذا عمليًا سيتم وصفه لاحقًا. باستخدام أدوات "التعبئة" و "القلم الرصاص" ، نقوم بتمييز المناطق الشفافة ؛ تدوين تم!

هذا ما فعلته من قبل ، قبل حوالي عشر سنوات. الآن ، بعد أن نظرت بعناية في لوحة Microangelo ، لدي أسئلة. ما هذه اللوحة الغريبة ، 18 لونًا؟ كيف يمكنك تخزين 18 لونًا في ملف؟ الرقم ليس مستديرًا ، أيها السادة ، المبرمجون لا يفعلون ذلك ؛ هذا ليس مناسبًا لهم. )) يمكن ملاحظة أنه يوجد في اللوحة 16 لونًا صلبًا واثنان من الخدمات: "شفاف" و "معكوس". أي نوع من "معكوس"؟ - إذا حدث مثل هذا اللون ، فإنه يعرض صورة سلبية لما يقع تحته ؛ يتم استخدامه في أغلب الأحيان في المؤشرات ؛ والمؤشر ، في جوهره وبنيته ، هو أيضًا رمز. ولكن كيف يتم تخزين كل هذه الألوان؟ إذا كانت نقاط الصورة العادية معبأة في 4 بت (16 لونًا) ، فيمكن تخزين الشفافية فقط كقناع نقطي منفصل (1 بت لكل نقطة صورة). حسنًا ، أين يتم تخزين الانعكاس بعد ذلك؟ قناع آخر ، أم ماذا؟ ليست اقتصادية ولكنها ممكنة ... لنعد.

الرمز 48x48 ، 16 لونًا ، صورة واحدة. حجم الملف 1662 بايت. ماذا يوجد بها؟ أتخيل بشكل خافت الخفايا ، لكن أحاول اكتشافها. الجزء الرئيسي ، الصورة نفسها: 48 * 48/2 = 1152 بايت. اللوحة: 16 * 4 = 64 بايت. قناع الشفافية 48 * 48/8 = 288 بايت. عنوان .ico ، رسميًا = 6 بايت. وصف الإطار (1 جهاز كمبيوتر) من الوثائق = 16 بايت. المجموع: 1152 + 64 + 288 + 6 + 16 = 1526. ربما ، هناك شيء آخر ، لأن حجم الملف الحقيقي أكبر - ولكن لا يهم ؛ شيء آخر مهم ، ما تبقى من "عدم التناسق" صغير: 136 بايت ، ومن الواضح أنه لا يسمح بوضع قناع بت آخر بحجم 288 بايت. لذلك ... يتم تضمين اللون العكسي بطريقة ما في الصورة نفسها. ربما يمكنك الآن أن تخمن بنفسك كيف فعلوا ذلك؟

وقد فعلوا ذلك ، على ما يبدو ، مثل هذا: في Windows الأصلي (على ما يبدو ، بدءًا من Win 95OSR2 بالكامل ، وفي Win XP والأحدث بالفعل جزئيًا) ، في الرموز والمؤشرات ، بشكل صارم - لم يكن هناك لون شفاف حقيقي. إذا أظهر قناع ألفا: نقطة المؤشر / الرمز الحالية "شفافة" - تم أخذ اللون تحت المؤشر / الرمز و XORed ("حصري" أو "" ؛ ربما كان هناك طرح فقط) - انتباه! - مع أخذ لون النقطة الحالية من لوحة الأيقونات.

ما هذا؟ إذا كان اللون الأول (أسود في لوحة ثابتة) ، فإن XOR لم يفعل شيئًا مع الخلفية - أصبح اللون شفافًا للتو. إذا كان اللون الأخير (في لوحة ثابتة - أبيض) - يتغير اللون تمامًا ، ويتحول إلى سلبي. هذا هو السر الكامل لكيفية تخزين "18 لونًا" ... أي مرة أخرى: "شفاف" = قناع ألفا أسود (+) ، "معكوس" = قناع ألفا أبيض (+). والآن - دعنا نتحدث عن مواطن الخلل.

التحذير المذكور أعلاه من قبل Microangelo ينص على: "ليس لديك ألوان بيضاء وسوداء كاملة في اللوحة ، والعمل مع الشفافية سيكون غير صحيح!" في الواقع ، قد تعمل لوحة الألوان التكيفية لدينا بدون أسود أو أبيض. فكيف ستعمل الشفافية؟ أوه ، تمامًا كما نتوقع: ستأخذ بعض الألوان من اللوحة (على سبيل المثال ، الخضراء) ، "XOR" مع الخلفية ، وسوف نحصل على لون أرجواني جميل بدلاً من الشفافية. )) أو مثال آخر - وقع اللون الأسود عن طريق الخطأ في مكان آخر لون في اللوحة: وتحول "الانقلاب" إلى الشفافية الكاملة المعتادة.



مثال: على اليسار لوحة قياسية ، على اليمين تمت إعادة برمجتها. على اليسار ، تعمل الشفافية (P) والانقلاب (I) كما ينبغي ؛ على اليمين - من الواضح لا.

ومع ذلك ، يمكننا ملاحظة كل رموز الرموز هذه فقط في Windows الأصلي. تتجاهل أنظمة التشغيل الحديثة ، مثل Win 10 ، ألوان اللوحة ، وقناع البت "الشفافية" يعمل دائمًا تمامًا مثل الشفافية في أنقى أشكاله: لا يوجد XOR ، ولا يوجد انعكاس أيضًا. ومع ذلك ، في آلية عرض المؤشر ، لا يزال هناك توافق - تعمل دائرة اقتصادية قديمة جيدة كاملة هناك ؛ "دافئ ، مصباح" و ... قلة من الناس يفهمون ويحتاجون.



مثال: عرض مختلف للرموز نفسها في نظامي التشغيل Windows XP و Windows 7.

Source: https://habr.com/ru/post/ar422495/


All Articles