การประมวลผลข้อมูลดิบ

การประมวลผลข้อมูลดิบ

เพื่อปรับปรุงประสิทธิภาพของ Aspose.PSD API เราได้นำเสนอวิธีการประมวลผลข้อมูลดิบด้วยเวอร์ชัน 2.4.0 ขึ้นมา การประมวลผลข้อมูลดิบนี้ถูกใช้ภายในและมี API ภายนอกเพื่อให้สามารถใช้จากภายนอกห้องสมุดเพื่อปรับปรุงประสิทธิภาพโดยรวม บางครั้งการประมวลผลนั้นอาจมีความซับซ้อนและต้องการคำอธิบายบางอย่าง การประมวลผลข้อมูลดิบใช้งานได้ในปัจจุบันสำหรับรูปแบบ BMP เท่านั้น

เพื่อช่วยนักพัฒนาให้ได้ประสิทธิภาพที่ดีที่สุด Aspose.PSD API ให้ระบบการประมวลผลข้อมูลดิบซึ่งมี API ภายนอกสำหรับปรับแต่ง นักพัฒนาจะใช้วิธีเรียกฟังก์ชัน LoadRawData และ SaveRawData เพื่อใช้การประมวลผลข้อมูลดิบ วิธีเหล่านี้ยังต้องใช้รูปแบบข้อมูลดิบที่ต้องการโดยใช้คลาส RawDataSettings โดยให้นักพัฒนาระบุรูปแบบข้อมูลดิบใดก็ได้ อย่างไรก็ตามเพื่อให้ได้ประสิทธิภาพที่ดีที่สุดคุณจะต้องใช้รูปแบบข้อมูลดิบที่ข้อมูลถูกจัดเก็บอยู่ คลาส RawDataSettings ที่กำหนดไว้ในคลาส RasterImage ช่วยกำหนดรูปแบบข้อมูลดิบของภาพ data format ภายในภาพ โดยเมื่อส่งอินสแตนซ์ RawDataSettings เข้าไปในเมทอด LoadRawData ข้อมูลจะถูกส่งออกในรูปที่เป็นอย่างเดียวโดยไม่มีการแปลงใดๆ กำกวมเพียงเท่านั้น และอาจเพิ่มประสิทธิภาพ ออกไป ในอีกด้านหนึ่งคุณจะต้องดูแลรูปแบบข้อมูลดิบทั้งหมดที่เป็นไปได้ซึ่งอาจซับซ้อนบางครั้ง

เพื่อทำให้กระบวนการดูแลง่ายขึ้นหรือเสียสมาคมบางสิ่งคุณสามารถระบุ RawDataSettings ที่ต้องการโดยการสร้างอินสแตนซ์และกำหนดค่าให้คลาสด้วยการตั้งค่าข้อมูลดิบที่ต้องการ มีกรณีที่ไม่สามารถส่งคืนข้อมูลดิบในรูปแบบที่กำหนดไว้ (ตัวอย่างเช่นการแปลงจากพื้นที่สี CMYK เป็น RGB ไม่สามารถใช้ในเวอร์ชัน 2.4.0) อีกทั้งยังอาจมีสถานการณ์ที่การประมวลผลข้อมูลดิบไม่สามารถใช้ได้สำหรับรูปแบบภาพทางการ เพื่อกำหนดว่าคุณสามารถใช้ครอบครองอินเทอร์เฟซ IsRawDataAvailable แอททริบิวตี้

ความเข้าใจ

สำหรับรูปแบบข้อมูลพิกเซล RGB มีข้อมูลของพาเลต (palette-based) และ ยังมีรูปแบบข้อมูลดิบเฉพาะสำหรับ 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 ในกรณีนี้คุณควรได้รับเรยลเอาต์ต่อไปนี้:…

todo:image_alt_text

นี่คือคุณจะได้รับ 2 ไบต์ที่ไบรที่ 1 มี 7 พิกเซลอย่างต้องการ และ 1 พิกเซล เบอร์ 2 มี 1 พิกเซลที่ต้องการและ แล้วครองด้วย 7 ซึมถดัน คุณอาจถามว่าทำไมเราไม่ได้ทำการย้ายข้อมูลและวางสองพิกเซลเข้าไปในไบต์เดียวกัน? คำตอบคือ: เพื่อเคี้ยวประสิทธิภาพอย่างสูง กระบวนการภายในทุกด้วยโดยเริ่มจากพิกเซลแรก และ จบด้วยพิกเซลล่าสุดที่มีให้ มีสถานการณ์ที่หายาก สมมติว่าจะต้องการแยกส่วนของพิกเซล นอกจากนี้เราไม่มีความรู้ว่าพิกเซลเหล่านั้นจะถูกประมวลผ่านว่ามันอาจทำให้การประมวลผลลดลงแลป่วยโค้ดเรื่อยๆ กำลังดู รูปแบบถูกชูของบิทที่ถูกที่จะคำนวณ ณ จุดไหนที่พิกเซลที่ต้องการจะเริ่มต้น ให้ใช้สูตรง่าย ๆ ไหนิ คูณ 8 (หรือ bits count)% 8…

การแปลงสีแบบ RGB ด้วยพาเลต

เพื่อให้ได้ประสิทธิภาพสูงสุดให้ใช้ที่เดียวกันรูปแบบข้อมูลดิบจากแหล่งต้นที่มีไปยังจุดหมายและขนาดเส้นเท่า อย่างไรก็ตามบางครั้งคุณอาจต้องทำการแปลงข้อมูล เช่น คุณอาจโหลดรูปภาพ RGB 1 บิตต่อพิกเซล และบันทึกด้วย 2 บิตต่อพิกเซล หรือโหลดรูป RGB 4 บิตและลดระดับสีลงเหล 2 บิตต่อพิกเซล ในทุกกรณีควรใช้การแปลงสี การแปลงรูปภาพ RGB ที่มีดัชนีอาจเป็นเรื่องยากและไม่สามารถทำได้โดยไม่ได้ทำการตั้งค่าบางอย่าง เราต้องระบุว่าขอบเขตสีเดิมจะถูกแมปไปยังสีของเป้าหมาย ให้ทำงานนี้เราต้องมีโหนด modes:

  • การแปลงพาเลต (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

รูปแบบด้วยค่าของพาเลตดูอย่างนี้:…

todo:image_alt_text

และเราแปลงรูปด้วย 4 บิตเหมือนกับค่าพาเลตใดๆๆ ที่น่าจะตรงกันการใช้ง