עיבוד נתונים Si

עיבוד נתונים גולמיים

כדי לשפר את ביצועי ממשק ה-API של Aspose.PSD הכנויים, הוספנו שיטה לעיבוד נתונים גולמיים עם גרסה 2.4.0. עיבוד הנתונים הגולמיים משמש עכשיו בפנים ויש לו API חיצוני כך שניתן להשתמש בו מחוץ לספריית המשאבים על מנת לשפר את הביצועים הכלליים. לעיתים קרובות העיבוד מסובך קצת ודורש הסבר. עיבוד הנתונים הגולמיים זמין כרגע לפורמט BMP בלבד.

על מנת לעזור לפיתוחים לקבל את הביצועים הטובים ביותר, ממשק ה-API של Aspose.PSD מספק מערכת עיבוד נתונים גולמיים שיש לה API חיצוני להתאמה אישית. הפיתוחים יכולים לקרוא לפעולות LoadRawData ו-SaveRawData כדי להשתמש בעיבוד נתונים גולמיים. שתי הפעולות מחייבות גם קביעת פורמט הנתונים הגולמיים הרצוי באמצעות מחלקת RawDataSettings. מחלקת RawDataSettings מאפשרת לפיתוחים לקבוע כל פורמט נתונים גולמיים. אולם, כדי להשיג את הביצועים הטובים ביותר עליך להשתמש בפורמט הנתונים הגולמיים שבו הנתונים נשמרים בו. RawDataSettings שמוגדר במחלקת RasterImage עוזר לקבוע את פורמט נתוני התמונה. כאשר עוברים את מופפצות RawDataSettings לפעולת LoadRawData, הנתונים נכונים כמו שהם, ללא המרה שנעשתה, ויוכלו לשפר את הביצועים. מצד השני, עליך לטפל בכל העיבודים האפשריים של פורמטים נתונים גולמיים שעשויים להיות לעיתים קרובות קצת מורכבים.

על מנת לפשט את תהליך הטיפול, על חשבון קצת חוסר ביצועים, ניתן לציין את הRawDataSettings הרצוי על ידי חידוש ואיתור המחלקה עם ההגדרות הרצויות של נתוני גולמיים. ישנם מקרים בהם אין אפשרות להחזיר את הנתונים הגולמיים בהפורמט שנקבע (לדוגמה המרה ממרחב הצבע CMYK ל-RGB אינה זמינה בגרסה 2.4.0). וכמובן, יכולות להיות מצבי שלא ניתן לפעול עם עיבוד נתונים גולמיים עבור פורמט תמונה כלשהו. על מנת לקבוע אם אפשר להשתמש בפעולות משפחת LoadRawData ו-SaveRawData, עליך לבדוק את המאפיין IsRawDataAvailable.

תובנה

עבור פורמט נתוני פיקסל RGB קיימים פורמטים נתונים גולמיים מבוססי מקלחת (פלטה). פורמטי נתונים גולמיים מבוססי מקלחת מכילים אינדקסי ערכי פלטה בטווח 0..(2^bis count - 1). פורמטי הנתונים הגולמיים מבוססי מקלחת הם 1, 2, 4 ו-8 ביטים לפיקסל. שאר הפורמטים הם פורמטי נתונים גולמיים מבוססי RGB. בזמן טעינת הנתונים הגולמיים, עליך לקחת בחשבון שיש מספיק בתים זמינים לטעינת הנתונים, אחרת יושלך חריגה מתאימה. תוכל פשוט לאפס את גודל מערך הבתים על ידי כפל גודל שורת הנתונים במספר השורות הדרושות. גודל שורת הנתונים עשוי להשתנות ולהשתלט על פורמט אחסון הנתונים הגולמיים.

על מנת להשיג את הביצועים הטובים ביותר תמיד עליך להשתמש בגודל שורת נתונים גולמיים השווה לערך המאפיין RasterImage.RawLineSize. אולם, לעיתים יתכן שתצטרך להוסיף ריסוסים נוספים לשורות הנתונים הגולמיים, או להפחיתם, וכאשהו במקרה זה יכול להשתמש בגודל שורת מסוים. אם נדרש תת-סט של מלבן התמונה, אז עליך לקחת בחשבון את ההזזות האפשריות המתרחשות עבור פורמטי פיקסל צבע RGB מאוחסנים במקלחת. לדוגמה, נקח בחשבון תמונה בממדי 100x100 פיקסלים ופורמט נתונים גולמיים של 1 ביט לפיקסל. ברצונך לטעון מלבן נתונים גולמיים עם המיקום (7,0) והממדים (2,1), או במילים אחרות, אתה צריך 2 פיקסלים שמתחילים מ-7 על ציר x ומ-0 על ציר y. במקרה זה, עליך לקבל את התצורת הנתונים הבאה:

todo:image_alt_text

כלומר, תקבל 2 מילים בהן הבית הראשון מכיל 7 פיקסלים שלא מבוקשים, אז פיקסל מבוקש, והבית השני מסתיים בפיקסל מבוקש ואז 7 פיקסלים שאינם מבוקשים. תוכל לשאול למה לא ביצענו הזזת נתונים ושמנו את שני הפיקסלים הללו לבית אחד? התשובה פשוטה: לשמור על ביצועים גבוהים. כל העיבוד הפנימי נעשה בדר"כ עם כל הנתונים המתחילים מהפיקסל הראשון ומסתיים בפיקסל האחרון הזמין. ישנם מצבי רכישה כאשר נדרש תת-קבוצת פיקסלים. וכמו כן, אין לנו מושג איך פיקסלים אלה ייעודדו לכתב ועל מנת לחשב את הפיקסלים הדרושים המראיינים, אין צורך לקבוע את הבית הראי המידי איפה פיקסלים מבוקשים יתחילו. על מנת לחשב את הבית הראי המדוין יכולה להיות נמנונת פשוטה: (rect.Left * bitsCount) % 8.

מרה RGB Indexed לצבע

כדי לקבל את הביצועים הטובים ביותר, תמיד עליך להשתמש באותם הגדרות נתונים גולמיים מקור ויעד, פורמטי פיקסל וגודלי שורות. אולם, בחלק מהמקרים ייתכנו צורך בהמרת נתונים. לדוגמה, תוכל לטעון תמונת 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,