معالجة البيانات الخام
معالجة البيانات الخام
لتحسين أداء واجهة برمجة تطبيقات Aspose.PSD، قدمنا طريقة لمعالجة البيانات الخام مع الإصدار 2.4.0. حاليًا يُستخدم المعالجة الخامة داخليًا ويحتوي على واجهة برمجة خارجية لكي يمكن استخدامها من خارج المكتبة لتحسين الأداء بشكل عام. أحيانًا تتعقد عملية المعالجة قليلاً وتحتاج إلى شرح بعض الشروح. حاليًا يتوفر معالجة البيانات الخام فقط لتنسيق BMP.
لمساعدة المطورين على الحصول على أفضل أداء، توفر واجهة برمجة تطبيقات Aspose.PSD نظامًا لمعالجة البيانات الخام التي تحتوي على واجهة برمجة خارجية للتخصيص. يقوم المطورون بدعوة أسرة أساليب LoadRawData و SaveRawData لاستخدام معالجة البيانات الخامة. هذه الأساليب تتطلب أيضًا تعيين صيغة البيانات الخام المطلوبة باستخدام فئة RawDataSettings. تسمح فئة RawDataSettings للمطورين بتحديد أي تنسيق للبيانات الخامة. ومع ذلك، لتحقيق أفضل أداء يجب استخدام تنسيق البيانات الخامة التي تم تخزين البيانات فيه. تساعد فئة RawDataSettings المحددة في فئة RasterImage في تحديد تنسيق البيانات الخامة للصورة. عند تمرير مثيل RawDataSettings إلى أسلوب LoadRawData، يتم إرجاع البيانات كما هي، من دون تطبيق أي تحويل، وقد يحسن الأداء. على الجانب المقابل، يجب عليك أن تهتم بكل تنسيقات البيانات الخامة المحتملة والتي قد تكون في بعض الأحيان معقدة قليلاً.
لتبسيط عملية المعالجة، على حساب غرامة بين الأداء، يمكنك تحديد RawDataSettings المطلوبة من خلال تهيئة وتهيئة الفئة باستخدام إعدادات البيانات الخامة المطلوبة. هناك حالات قد لا يكون فيها من الممكن إعادة البيانات الخامة في التنسيق المحدد (على سبيل المثال، لا تتوفر تحويل من مساحة الألوان CMYK إلى RGB في الإصدار 2.4.0). علاوة على ذلك، قد تظهر سيناريوهات تكون فيها معالجة البيانات الخامة غير متاحة على الإطلاق لتنسيق الصورة. من أجل تحديد ما إذا كان بإمكانك استخدام أسرة أساليب LoadRawData و SaveRawData يجب الاستعلام عن خاصية IsRawDataAvailable.
رؤية
لتنسيق بيانات البكسل RGB هناك تنسيقات بيانات خام تستخدم الفهرسة (على أساس لوحة الألوان) وتعتمد على أنظمة التنسيق على أساس RGB. تحتوي تنسيقات البيانات الخام التي تستخدم الفهرسة على مؤشرات إدخال لوحة الألوان في النطاق 0..( 2^ bis count - 1). تكون تنسيقات البيانات الخام التي تستخدم الفهرسة 1، 2، 4 و 8 بت لكل بكسل. باقي التنسيقات تعتمد على أنظمة تنسيق البيانات الخامة على أساس RGB. عند تحميل البيانات الخامة، احرص على توفر كافة البايتات المطلوبة لتحميل البيانات، وإلا سيتم رمي الاستثناء المناسب. يمكنك ببساطة تقدير حجم مصفوفة البايتات عن طريق ضرب حجم السطر بالسطور المطلوبة. يمكن أن يختلف حجم السطر ويعتمد على تنسيق تخزين البيانات الخامة.
لتحقيق أفضل أداء، استخدم دائمًا حجم سطر بيانات خام يساوي قيمة خاصية RasterImage.RawLineSize. ومع ذلك، قد تحتاج أحيانًا إلى إضافة حشو إضافي لصفوف البيانات الخامة، أو تقليله، وعندما يكون هذا الحال يمكن استخدام حجم سطر مختلف. إذا كنت بحاجة إلى مجموعة فرعية من مستطيل الصورة المحيط، فاعتبر التحولات البتية التي قد تحدث لتنسيقات بكسل RGB المؤشرة. على سبيل المثال، دعونا نفترض وجود صورة بأبعاد 100x100 بكسل وتنسيق بيانات خام 1 بت لكل بكسل. تريد تحميل مستطيل من البيانات الخامة بموقع (7،0) وأبعاد (2،1)، أو بعبارة أخرى، تحتاج إلى 2 بكسل تبدأ من x=7 و y=0. في هذه الحالة، يجب أن تتلقى التخطيط التالي:
وهذا يعني أنك ستتلقى بايتين حيث يحتوي البايت الأول على 7 بكسل غير مرغوب فيها، ثم 1 بكسل مرغوب فيه، والبايت الثاني يحتوي على 1 بكسل مرغوب فيه وبعد ذلك 7 بكسل غير مرغوب فيه. قد تسأل لماذا لم نُجرِ بيانات التحويل ووضع هذه البكسلتين في بايت واحد؟ الجواب بسيط: للحفاظ على الأداء العالي. عادة ما يتم إجراء جميع المعالجات الداخلية بكل البيانات تبدأ من أول بكسل وتنتهي بآخر بكسل متاح. هناك حالات نادرة عندما تكون هناك حاجة لمجموعة فرعية من البكسلات. علاوة على ذلك، ليس لدينا فكرة عن كيفية معالجة تلك البكسلات بعد ذلك لذا فإن التحول سيقلل من الأداء ويجعل الكود غير ضروري للغاية. دائماً قم بتقدير البت الصحيح (لا حاجة لتحديد البايت الصحيح لأن البيانات تأتي دائمًا مع بايت أول مملوء) حيث ستبدأ البكسلات المطلوبة. يمكن استخدام صيغة بسيطة لحساب البت الصحيح: (rect.Left * bitsCount) % 8.
تحويل ألوان RGB المؤشرة
للحصول على أقصى أداء ممكن، استخدم دائمًا نفس إعدادات البيانات الخامة المصدر والوجهة، وتنسيقات البكسل وأحجام الخطوط. ومع ذلك، قد تحتاج أحيانًا إلى تنفيذ تحويلات البيانات. على سبيل المثال، يمكنك تحميل صورة RGB 1 بت لكل بكسل وحفظها بـ 2 بت لكل بكسل، أو تحميل صورة RGB 4 بت وخفض نطاق ألوانها إلى 2 بت لكل بكسل. في كلتا الحالتين، يجب تطبيق تحويل للألوان. قد يكون تحويل الصور المؤشرة بمجال RGB في بعض الأحيان صعبًا ولا يمكن تنفيذه دون بعض الإعدادات. علينا تحديد كيف تتم تطابق مجال الألوان المصدري بمجال الألوان الهدفي. لإنجاز هذه المهمة يجب علينا التفرق بين:
- تحويل لوحة الألوان (DitheringMethods.PaletteConversion)
- تحويل بيانات خامة (DitheringMethods.PaletteIgnore)
- التحويل المخصص (DitheringMethods.CustomConverter)
عند استخدام تحويل لوحة الألوان، يحاول مجال الألوان المصدري تطابق مجال الألوان الهدفي قدر الإمكان. على سبيل المثال، لنفترض أن لدينا صورة 4 بت مع الألوان التالية: [0] RGB=0, 0, 0 [1] RGB=17, 17, 17 [2] RGB=34, 34, 34 [3] RGB=51, 51, 51 [4] RGB=68, 68, 68 [5] RGB=85, 85, 85 [6] RGB=102, 102, 102 [7] RGB=119, 119, 119 [8] RGB=136, 136, 136 [9] RGB=153, 153, 153 [10] RGB=170, 170, 170 [11] RGB=187, 187, 187 [12] RGB=204, 204, 204 [13] RGB=221, 221, 221 [14] RGB=238, 238, 238 [15] RGB=255, 255, 255
تبدو الصورة المصدرية على النحو التالي:
ثم نقوم بتحويل الصورة 4 بت إلى صورة 1 بت باستخدام الألوان التالية:
[0] RGB = 0, 0, 0 [1] RGB = 255, 255, 255
في حالة استخدام وضع تحويل لوحة الألوان، يقرأ المحول مجال الألوان المصدري ويحدد فهرس الهدف باستخدام أسلوب GetNearestColorIndex في لوحة الألوان الهدفية. يتم استخدام قيمة خاصية RasterImage.RawFallbackIndex في حالة تقديم أسلوب GetNearestColorIndex للوحة الألوان مؤشر خارج النطاق. يحول هذا الألوان المصدرية إلى أقرب ألوان هدف فيما يتعلق بقيم الشدة. تتماشى الصورة الهدفية مع الصورة المصدرية بقدر الإمكان. يمكنك رؤية النتيجة التالية:
في وضع تحويل بيانات خامة يتم استخدام سيناريو مختلف. يتم تجاهل لوحات الألوان المصدر والهدف ببساطة ويتم تعيين فهارس المصدر إلى فهارس الوجهة. عندما يتم العثور على قيمة يتعذر تعيينها داخل النطاق الهدفي (عند تقليل عدد البتات)، يتم استخدام قيمة خاصية RasterImage.RawFallbackIndex. قيمة القيمة هي 0 اعتبارًا من القيمة الافتراضية وستتم عينتها إلى أول لون في لوحة الألوان الهدفية. إذا تم استخدام قيمة هذه الخاصية خارج نطاق الهدف، سيتم رمي الاستثناء المناسب. يؤدي ذلك إلى نتائج أقل تنبؤًا يمكن عرضها على الصورة التالية:
يعد وضع تحويل لوحة الألوان حلاً أكثر صحة لمشكلة تعيين الألوان ولكنه أيضً