การจัดการไฟล์ Windows Metafile
รูปแบบ Windows Metafile เป็นรูปแบบไฟล์รูปภาพที่สามารถมีทั้งกราฟิกแบบเวกเตอร์และแรสเตอร์ รูปแบบนี้ใช้เพื่อจัดเก็บข้อมูลกราฟิกในหน่วยความจำหรือไฟล์บนดิสก์ ไฟล์เมตาจะจัดเก็บรายการการเรียกใช้ฟังก์ชันใน Windows Graphics Device Interface (GDI) ที่ต้องดำเนินการเพื่อแสดงภาพบนหน้าจอ ระบบตีความและดำเนินการคำสั่งเหล่านี้ในบริบทการแสดงผล
ก่อนหน้านี้ Windows Metafile เป็นรูปแบบภาพเวกเตอร์เดียวที่ Microsoft Word รองรับ ขณะนี้ Microsoft Word รองรับรูปแบบ SVG แล้ว แต่รูปแบบ metafile ยังคงใช้กันทั่วไปในเอกสาร Word นอกจากนี้ Metafile อาจเป็นรูปแบบการแลกเปลี่ยนสำหรับแอปพลิเคชันอื่นๆ เช่น Microsoft Visio โดยพื้นฐานแล้ว วัตถุประสงค์หลักของ Metafile คือเพื่อให้แน่ใจว่ามีการแลกเปลี่ยนข้อมูลกราฟิกระหว่างแอปพลิเคชัน Windows
Windows Metafile มี 3 เวอร์ชัน:
- WMF - ร้านค้าเรียกไปที่ 16 บิต GDI
- EMF – ร้านค้าเรียกไปยัง Win32/GDI
- ร้านค้า EMF+ Metafile เรียกไปที่ GDI+ EMF+ Metafile อาจเป็นแบบคู่ก็ได้ โดยอธิบายกราฟิกเดียวกันกับทั้ง EMF และ EMF+
ปัญหาที่มีอยู่กับ Windows Metafile คือ รูปแบบที่ไม่ใช่ Word ส่วนใหญ่ไม่รองรับ ซึ่งมักจะบันทึกเอกสารไว้ ดังนั้นจึงจำเป็นต้องแปลงรูปแบบ Metafile เป็นรูปแบบแรสเตอร์หรือเวกเตอร์อื่น ง่ายต่อการแปลง Windows Metafile เป็นภาพแรสเตอร์บน .NET เพียงส่งไปที่ GDI+ แต่เป็นไปไม่ได้บนแพลตฟอร์มอื่น เนื่องจากแม้แต่ GDI+ ก็ไม่มีฟังก์ชันในการแยกกราฟิกเวกเตอร์จาก Metafile เพื่อแก้ไขปัญหาเหล่านี้ Aspose.Words จึงใช้โปรแกรมเล่น Windows Metafile ของตัวเอง ซึ่งสามารถเล่นรูปแบบ Metafile ทั้งกราฟิกแบบเวกเตอร์และแรสเตอร์ได้บนทุกแพลตฟอร์ม
การควบคุม Aspose.Words Metafile Player
คลาส MetafileRenderingOptions ช่วยให้คุณควบคุมโปรแกรมเล่นเมตาไฟล์ได้ ตัวอย่างเช่น คุณสามารถกำหนดวิธีการแสดงผลรูปภาพ metafile โดยใช้คุณสมบัติ rendering_mode ซึ่งมีความหมายพิเศษเมื่อแปลงเป็นบิตแมป (ดูคุณสมบัติ ImageSaveOptions.metafile_rendering_options ด้วย)
การบันทึกเป็นบิตแมปทำงานแตกต่างออกไปบนแพลตฟอร์มอื่นที่ไม่ใช่ .NET แม้ว่าการเรนเดอร์ .NET GDI+ จะเป็นข้อมูลอ้างอิงที่ทำงานได้เกือบจะสมบูรณ์แบบแม้แต่กับรูปแบบเมตาไฟล์ที่ซับซ้อนที่สุด แต่บนแพลตฟอร์มอื่นก็อาจทำให้เกิดปัญหาหรือไม่ได้รับการรองรับเลย
รองรับการดำเนินงานแรสเตอร์
การดำเนินการแรสเตอร์เป็นฟีเจอร์เมตาไฟล์ที่ซับซ้อน ซึ่งปัจจุบันมีการรองรับที่จำกัด การดำเนินการแรสเตอร์มีอยู่ในรูปแบบเมตาไฟล์ WMF และ EMF รูปแบบเมตาไฟล์ EMF+ ไม่ได้ใช้การดำเนินการแรสเตอร์โดยตรง แต่สามารถมีส่วน EMF, เมตาไฟล์ WMF หรือ EMF แบบฝังได้
มีการดำเนินการแรสเตอร์แบบไบนารีและแบบไตรภาค:
- การดำเนินการแรสเตอร์แบบไบนารีใช้กับคำสั่งการวาดด้วยปากกา เช่น การวาดเส้นและเส้นโค้ง เมื่อวาดเส้น สีปากกาจะรวมกับสีบิตแมปปลายทาง (สีของพิกเซลที่สอดคล้องกันบนพื้นผิวอุปกรณ์) โดยใช้การดำเนินการทางลอจิคัลระดับบิตที่ระบุกับค่าสีฐานสิบหก ตัวอย่างรูปภาพด้านล่างแสดงให้เห็นถึงผลกระทบของการดำเนินการแรสเตอร์ไบนารีทั้ง 16 รายการที่ใช้กับแถบสีที่แตกต่างกัน 20 แถบ แถบสีแนวตั้งจะถูกวาดก่อน แถบแนวนอนจะถูกวาดหลังจากใช้การดำเนินการแรสเตอร์ไบนารีแต่ละครั้ง ในกรณีทั่วไป R2_BLACK วาดสีดำ R2_NOT กลับสี R2_NOP จะไม่เปลี่ยนพื้นหลัง และ R2_WHITE วาดสีขาว
- การดำเนินการแรสเตอร์แบบไตรภาคจะถูกนำไปใช้เมื่อวาดภาพบิตแมป พวกเขารวมสีของพิกเซลรูปภาพบิตแมปที่สอดคล้องกัน แปรง และบิตแมปปลายทาง โดยใช้การดำเนินการทางตรรกะระดับบิตด้วยค่าสีฐานสิบหกที่ระบุ วัตถุประสงค์ทั่วไปประการหนึ่งของการใช้การดำเนินการแรสเตอร์แบบไตรภาคคือการจำลองความโปร่งใส รูปภาพที่ให้ไว้ในตัวอย่างด้านล่างสาธิตวิธีการจำลองความโปร่งใสของไอคอน บิตแมปมีสองประเภท: บิตแมปมาสก์ขาวดำและบิตแมปสี ขั้นแรก มาส์กบิตแมปจะถูกวาดด้วยการดำเนินการแรสเตอร์ SRCAND โดยจะเปลี่ยนขอบเขตไอคอนทึบแสงเป็นขาวดำ โดยไม่เปลี่ยนแปลงพื้นที่โปร่งใส จากนั้นบิตแมปที่สองจะถูกวาดด้วยการดำเนินการแรสเตอร์ SRCINVERT โดยจะแสดงพิกเซลสีบนพื้นที่สีดำ โดยปล่อยให้พื้นที่โปร่งใสไม่เปลี่ยนแปลง
การดำเนินการแรสเตอร์ไม่สามารถแปลงเป็นกราฟิกแบบเวกเตอร์ได้โดยตรง Aspose.Words จำลองการทำงานของแรสเตอร์โดยการแรสเตอร์บางส่วนบนพื้นผิวอุปกรณ์ที่ได้รับผลกระทบจากการทำงานของแรสเตอร์ เพื่อจุดประสงค์นี้ จะใช้คุณสมบัติ emulate_raster_operations
ตัวอย่างที่แสดงด้านล่างสาธิตวิธีที่ Aspose.Words เรนเดอร์เมตาไฟล์เป็นบิตแมป เมื่อไม่สามารถเรนเดอร์บันทึกเมตาไฟล์บางส่วนเป็นกราฟิกแบบเวกเตอร์ได้อย่างถูกต้อง:
# Load the document from disk.
doc = aw.Document(docs_base.my_dir + "Rendering.docx")
metafileRenderingOptions = aw.saving.MetafileRenderingOptions()
metafileRenderingOptions.emulate_raster_operations = False
metafileRenderingOptions.rendering_mode = aw.saving.MetafileRenderingMode.VECTOR_WITH_FALLBACK
saveOptions = aw.saving.PdfSaveOptions()
saveOptions.metafile_rendering_options = metafileRenderingOptions
doc.save(docs_base.artifacts_dir +"PdfSaveOptions.HandleRasterWarnings.pdf", saveOptions)
การตั้งค่าสำรอง Metafile
Aspose.Words ไม่รองรับฟีเจอร์เมตาไฟล์จำนวนหนึ่งที่ซับซ้อนหรือหายากที่สุด ในกรณีนี้ Aspose.Words อาจใช้ทางเลือกแทนโปรแกรมเล่นไฟล์เมตาประเภทอื่น
ประการแรก Aspose.Words ดำเนินการสำรองจากโปรแกรมเล่นเมตาไฟล์เวกเตอร์ไปเป็นแรสเตอร์ ซึ่งควบคุมโดยคุณสมบัติ rendering_mode หากปิดใช้งานคุณลักษณะทางเลือก Aspose.Words จะพยายามแสดงกราฟิกทดแทนบางส่วนแทนคุณลักษณะที่ไม่ได้รับการสนับสนุน
Aspose.Words เล่น metafile เป็นแรสเตอร์ได้สำเร็จโดยใช้ GDI+ บน .NET ซึ่งทำให้ตัวเลือกการโทรกลับนี้ปลอดภัย
ประการที่สอง มีตัวเลือกสำหรับ EMF+ Dual metafile เพื่อสำรองจากการเล่นส่วน EMF+ ไปยังส่วน EMF มันถูกควบคุมโดย emf_plus_dual_rendering_mode หากมีปัญหาบางอย่างเกิดขึ้นเมื่อเล่นส่วน EMF ก็อาจใช้ทางเลือกกลับเป็นแรสเตอร์ได้เช่นกัน
สำหรับการดำเนินการแรสเตอร์ หากปิดใช้งาน emulate_raster_operations การดำเนินการแรสเตอร์จะถือว่าไม่รองรับ ซึ่งจะทริกเกอร์ทางเลือกสำรองให้กับโปรแกรมเล่นเมตาไฟล์บิตแมปหากเปิดใช้งาน ดังนั้น หากคุณมีเมตาไฟล์ที่มีการดำเนินการแรสเตอร์ แต่คุณไม่ต้องการใช้การจำลองการดำเนินการแรสเตอร์ แต่ยังต้องการรับเอาต์พุตเวกเตอร์ด้วยกราฟิกทดแทน ให้เลือก MetafileRenderingMode.VECTOR