עיבוד נתונים גולמיים
עיבוד נתונים גולמיים
לשיפור ביצועי API של Aspose.PSD הוצגה שיטת עיבוד נתונים גולמיים בגרסה 2.4.0. עיבוד הנתונים הגולמיים משמש כיום במנוע הפנימי ויש לו API חיצוני, כך שניתן להשתמש בו מחוץ לספרייה על מנת לשפר את הביצועים. לעיתים עיבוד הנתונים גולמיים יכול להיות מעט מסובך ולדרוש הסבר. עיבוד הנתונים הגולמיים זמין כיום רק עבור פורמט BMP.
כדי לעזור למפתחים להשיג את הביצועים הטובים ביותר, מספק ה-API של Aspose.PSD מערכת עיבוד נתונים גולמיים שכוללת API חיצוני להתאמה אישית. המפתחים יכולים לקרוא למערכת LoadRawData ו-SaveRawData כדי להשתמש בעיבוד נתונים גולמיים. גם עבור שימוש בשתי השיטות יש צורך להגדיר את פורמט הנתונים הגולמיים הרצוי באמצעות מחלקת RawDataSettings. מחלקת RawDataSettings מאפשרת למפתחים לציין פורמט נתונים גולמיים כלשהו. מבחינת ביצועים לרמה הטובה ביותר, יש להשתמש בפורמט הנתונים הגולמיים בו הנתונים מאוחסנים. ה-RawDataSettings שמוגדר במחלקת RasterImage מסייע בקביעת פורמט נתוני התמונה. בעת מעבר של מופע של RawDataSettings לשיטת LoadRawData הנתונים מוחזרים כפי שהם, ללא המרה מיוחסת, ויכולים לשפר את הביצועים. מהצד השני, יש לטפל בכל פורמטי מיצג נתונים גולמיים אפשריים, שיכולים להיות לעיתים מעט מורכבים.
כדי לפשוט את התהליך, על חשבון קצת האטי בביצועים, ניתן לציין את ההגדרות הגולמיות הרצויות על ידי יצירה ואתחול המחלקה עם הגדרות נתונים גולמיים הרצויות. קיימות מקרים בהם אין אפשרות להחזיר את הנתונים הגולמיים בפורמט המצויין (למשל, אין המרה מתחום הצבע CMYK ל-RGB זמינה בגרסה 2.4.0). בנוסף, ייתכן ותהליכי עיבוד נתונים גולמיים אינם זמינים כולל לפורמט תמונה. כדי לקבוע האם ניתן להשתמש בשיטתי LoadRawData ו-SaveRawData יש לשאול את המאפיין IsRawDataAvailable.
תובנה
לפורמט נתוני פיקסל RGB קיימים פורמטי נתונים גולמיים אינדקסישנליים ומבוססי RGB. פורמטים אינדקסישנליים מכילים אינדקסים של רשומות פלטת צבעים בטווח 0..(2^מספר הביטים – 1). פורמטים המבוססי RGB הם 1, 2, 4 ו-8 ביטים לכל פיקסל. כאשר מועברים נתונים גולמיים, חשוב לתת תשומת לב כי יש מספיק בתים זמינים לטעינת הנתונים, אחרת ישלח חריגה רלבנטית. ניתן להעריך בקלות את גודל מערך הבתים על ידי הכפלת גודל השורה במספר השורות הנדרשות. גודל השורה עשוי להשתנות ולהשתלשל על פי פורמט אחסון נתונים גולמיים.
על מנת להשיג את הביצועים הטובים ביותר תמיד יש להשתמש בגודל שורת נתוני גולם שווה לערך הנכסי של ה- RasterImage.RawLineSize. עם זאת, לעיתים ייתכן ויש להוסיף מילוי נוסף לשורות הנתונים הגולמיים, או להפחית אותו, וכאשר זה קורה גודל שורה אחר עשוי להתמצק. אם נדרשת משולבת של מלבן גבול תמונה, אז עליך לקחת בחשבון את ההזזות שעשויות לקרות עבור פורמטי פיקסל RGB אינדקסישנליים. לדוגמה, נניח תמונה עם ממדי 100x100 פיקסלים ופורמט נתוני גולם של 1 ביט לכל פיקסל. ברצונך לטעון מלבן נתונים גולמיים עם המיקום (7,0) והממדים (2,1), או במילים אחרות, נדרשים 2 פיקסלים החל מ-x=7 ו-y=0. במקרה זה, אתה אמוך לקבל את ההנדסה הבאה:
כך שאתה מקבל 2 בתים שבהם הבית הראשון מכיל 7 פיקסלים לא רצויים, לאחריהם פיקסל רצוי אחד, והבית השני מכיל פיקסל רצוי אחד ואז 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 [