การจัดการเมตาไฟล์Windows
Windowsรูปแบบเมตาไฟล์เป็นรูปแบบไฟล์ภาพที่สามารถประกอบด้วยกราฟิกแบบเวกเตอร์และแรสเ รูปแบบนี้ใช้ในการจัดเก็บข้อมูลกราฟิกในหน่วยความจำหรือแฟ้มบนดิสก์ รเรียกฟังก์ชันในอินเทอร์เฟซอุปกรณ์กราฟิกWindows(GDI)ที่ต้องดำเนินการเพื่อแสดงรูปภาพบนหน้าจอ ระบบตีความและรันคำสั่งเหล่านี้ในบริบทการแสดงผล.
เดิมWindowsเมตาไฟล์เป็นรูปแบบภาพเวกเตอร์เดียวที่รองรับโดยMicrosoft Word Microsoft Wordตอนนี้ยังสนับสนุนSVGรูปแบบ,แต่รูปแบบเมไฟล์ยังคงเป็นที่นิยมใช้ในเอกสารคำ. การแลกเปลี่ยนสำหรับโปรแกรมอื่นๆบางอย่างเช่นMicrosoftวิสัยทัศน์ การแลกเปลี่ยนข้อมูลแบบกราฟิกระหว่างการใช้งานWindows.
มีเวอร์ชัน3ของWindows:
- WMF-ร้านค้าโทรไป 16 บิตGDI.
- EMF-ร้านค้าโทรไปที่วิน32/GDI.
- EMF+ร้านค้าเมตาไฟล์โทรไปที่GDI+. EMF+เมตาไฟล์อาจเป็นแบบคู่,อธิบายกราฟิกเดียวกันกับทั้งEMFและEMF+ชิ้นส่วน.
ปัญหาที่มีอยู่กับWindowsเมตาไฟล์คือว่ามันไม่ได้รับการสนับสนุนโดยรูปแบบที่ไม่ใช่คำส่วนใหญ่ซึ่งเ นั้นจึงจำเป็นต้องแปลงรูปแบบเมไฟล์ในรูปแบบแรสเตอร์หรือเวกเตอร์อื่นๆ มันเป็นเรื่องง่ายที่จะแปลงWindowsเมตาไฟล์เป็นภาพแรสเตอร์บน.NETโดยเพียงแค่ผ่านมันไปGDI+แต่มันเป็นไปไม่ได้บนแพลตฟอร์มอื่นๆตั้งแต่แม้แต่GDI+ไม่ได้ให้ฟังก์ชั่นเพื่อดึงกราฟิกแบบเวกเตอร์จากเมตาไฟล์ เพื่อแก้ปัญหาเหล่านี้Aspose.Wordsใช้โปรแกรมเล่นเมตาไฟล์ของตัวเองWindowsซึ่งสามารถเล่นรูปแบบเมตาไฟล์ทั้งแบบเวกเตอร์และกราฟิกแรสเตอร์บนแพลตฟอร์มทั้งหมด.
การควบคุมโปรแกรมเล่นเมตาไฟล์Aspose.Words
MetafileRenderingOptionsชั้นช่วยให้คุณสามารถควบคุมเครื่องเล่นเมตาไฟล์. ใช้คุณสมบัติRenderingModeซึ่งมีความหมายพิเศษเมื่อแปลงเป็นบิตแมป(ดูคุณสมบัติของMetafileRenderingOptionsด้วย).
การบันทึกเป็นบิตแม็พทำงานต่างกันบนแพลตฟอร์มอื่นที่ไม่ใช่.NET ในขณะที่.NETGDI+การแสดงผลเป็นข้อมูลอ้างอิงที่ทำงานได้เกือบสมบูรณ์แม้สำหรับรูปแบบเมไฟล์ที่ซับซ้อนที่สุดบนแพลตฟอร์มอื่นๆมันอาจทำให้เกิดปัญหาหรือไม่ได้รับการสนับสนุนเลย.
สนับสนุนการดำเนินงานแรสเตอร์
การดำเนินงานแรสเตอร์เป็นคุณลักษณะเมตาแฟ้มที่ซับซ้อนซึ่งขณะนี้มีการสนับสนุนที่จำกัด การดำเนินงานของแรสเตอร์มีอยู่ในรูปแบบเมตาแฟ้มWMFและEMF รูปแบบเมตาไฟล์EMF+ไม่ได้ใช้การดำเนินการแรสเตอร์โดยตรงแต่สามารถประกอบด้วยEMFชิ้นส่วนฝังWMFหรือEMFเมตาไฟล์.
มีการดำเนินการแรสเตอร์ไบนารีและไบนารี:
- การดำเนินการแรสเตอร์ไบนารีจะนำไปใช้กับคำสั่งวาดปากกาเช่นวาดเส้นและเส้นโค้ง เมื่อวาดเส้นสีปากกาจะรวมกับสีบิตแมปปลายทาง(สีของพิกเซลที่สอดคล้องกันบนพื้นผิวของอุ ตัวอย่างภาพด้านล่างแสดงให้เห็นถึงผลของการดำเนินงานแรสเตอร์ไบนารีทั้งหมด 16 นำไปใช้กับแถบสีที่แตกต่างกัน 20 แถบ แถบสีแนวตั้งจะวาดก่อนแถบแนวนอนจะวาดหลังจากแต่ละการดำเนินการแรสเตอร์ไบน สำหรับกรณีง่ายๆR2_BLACKวาดสีดำ,R2_NOTจะผกผันสี,R2_NOPจะไม่เปลี่ยนพื้นหลัง,และR2_WHITEวาดสีขาว.

- ใช้เมื่อวาดภาพบิตแมป บิตแมปที่สอดคล้องกันพิกเซล,แปรง,และบิตแมปปลายทางโดยใช้การดำเนินงานแบบตรรกะบิ หนึ่งในวัตถุประสงค์ที่พบบ่อยที่สุดของการใช้การดำเนินการแรสเตอร์สามัญคือการจำลอง ภาพที่แสดงในตัวอย่างด้านล่างแสดงให้เห็นถึงวิธีที่ไอคอนโปร่งใสสามารถเทิดทูน มีสองประเภทของบิตแม็พ:บิตแม็พหน้ากากบี/ดับเบิลยูและบิตแม็พสี ขั้นแรกบิตแมปหน้ากากถูกวาดด้วยการดำเนินการแรสเตอร์SRCAND ไอคอนแพ็ครอบด้วยอายแชโดว์สีเข้มยาวที่แข็งแกร่งที่หลบภัยเป็นสิ่งที่แตกต่าง จากนั้นบิตแมปที่สองจะถูกวาดด้วยการดำเนินการแรสเตอร์SRCINVERT แสดงพิกเซลสีบนขอบเขตสีดำทำให้พื้นที่โปร่งใสไม่เปลี่ยนแปลง.

การดำเนินการแรสเตอร์ไม่สามารถแปลงเป็นกราฟิกแบบเวกเตอร์โดยตรง Aspose.Wordsเลียนแบบการดำเนินงานของแรสเตอร์โดยการแรสเตอร์บางส่วนพื้นผิวอุปกรณ์ที่ได้รับผล เพื่อจุดประสงค์นี้ใช้คุณสมบัติEmulateRasterOperations.
ตัวอย่างที่แสดงด้านล่างแสดงให้เห็นว่าAspose.Wordsแสดงเมตาไฟล์เป็นบิตแมปเมื่อไม่สามารถแสดงผล:
For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C | |
class HandleDocumentWarnings : public IWarningCallback { | |
using ThisType = HandleDocumentWarnings; | |
using BaseType = IWarningCallback; | |
using ThisTypeBaseTypesInfo = ::System::BaseTypesInfo<BaseType>; | |
RTTI_INFO(ThisType, ThisTypeBaseTypesInfo); | |
public: | |
System::SharedPtr<WarningInfoCollection> mWarnings; | |
void Warning(System::SharedPtr<WarningInfo> info) override; | |
HandleDocumentWarnings(); | |
}; | |
void HandleDocumentWarnings::Warning(System::SharedPtr<WarningInfo> info) | |
{ | |
//For now type of warnings about unsupported metafile records changed from DataLoss/UnexpectedContent to MinorFormattingLoss. | |
if (info->get_WarningType() == WarningType::MinorFormattingLoss) | |
{ | |
std::cout << "Unsupported operation: " << info->get_Description().ToUtf8String() << std::endl; | |
mWarnings->Warning(info); | |
} | |
} | |
HandleDocumentWarnings::HandleDocumentWarnings() : mWarnings(System::MakeObject<WarningInfoCollection>()) | |
{ | |
} | |
void RenderMetafileToBitmap(System::String const& inputDataDir, System::String const& outputDataDir) | |
{ | |
// Load the document from disk. | |
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"PdfRenderWarnings.doc"); | |
System::SharedPtr<MetafileRenderingOptions> metafileRenderingOptions = System::MakeObject<MetafileRenderingOptions>(); | |
metafileRenderingOptions->set_EmulateRasterOperations(false); | |
metafileRenderingOptions->set_RenderingMode(MetafileRenderingMode::VectorWithFallback); | |
// If Aspose.Words cannot correctly render some of the metafile records to vector graphics then Aspose.Words renders this metafile to a bitmap. | |
System::SharedPtr<HandleDocumentWarnings> callback = System::MakeObject<HandleDocumentWarnings>(); | |
doc->set_WarningCallback(callback); | |
System::SharedPtr<PdfSaveOptions> saveOptions = System::MakeObject<PdfSaveOptions>(); | |
saveOptions->set_MetafileRenderingOptions(metafileRenderingOptions); | |
doc->Save(outputDataDir + u"PdfSaveOptions.HandleRasterWarnings.pdf", saveOptions); | |
} |
การตั้งค่าทางเลือก
Aspose.Wordsไม่สนับสนุนจำนวนของคุณสมบัติเมไฟล์ที่มีความซับซ้อนมากที่สุดหรือหายาก ผู้ใช้สามารถใช้อินเตอร์เฟซIWarningCallBackและรับข้อความเตือน ถ้าAspose.Wordsพบคุณลักษณะที่ไม่สนับสนุนในเมตาไฟล์ระบบจะส่งข้อความเตือนด้วยWarningSourceMetafile. ในกรณีนี้Aspose.Wordsอาจดำเนินการสำรองไปยังประเภทที่แตกต่างกันของผู้เล่นไฟล์. ข้อความเตือนเกี่ยวกับทางเลือกที่จะออกยัง.
ประการแรก Aspose.Words จะดำเนินการย้อนกลับจากโปรแกรมเล่นเมตาไฟล์เวกเตอร์ไปเป็นแรสเตอร์ ซึ่งควบคุมโดยคุณสมบัติ RenderingMode หากปิดใช้งานคุณสมบัติย้อนกลับ Aspose.Words จะพยายามเรนเดอร์กราฟิกทดแทนบางส่วนแทนคุณสมบัติที่ไม่ได้รับการสนับสนุน.
Aspose.Wordsเล่นแฟ้มเมตาแฟ้มกับแรสเตอร์ได้สำเร็จโดยใช้GDI+บน.NETซึ่งทำให้ตัวเลือกการโทรกลับนี้ปลอดภัย.
ประการที่สอง,มีตัวเลือกสำหรับEMF+คู่เมไฟล์ที่จะสำรองจากการเล่นส่วนEMF+ไปยังส่วนEMF. มันถูกควบคุมโดยEmfPlusDualRenderingMode หากมีปัญหาบางอย่างเกิดขึ้นเมื่อเล่นส่วนEMFแล้วทางเลือกที่จะแรสเตอร์อาจจะดำเนินการเ.
สำหรับการดำเนินการแรสเตอร์ หาก EmulateRasterOperations ถูกปิดใช้งาน การดำเนินการแรสเตอร์จะถือว่าไม่ได้รับการสนับสนุน ซึ่งจะทริกเกอร์การย้อนกลับไปยังตัวเล่นเมตาไฟล์บิตแมปหากเปิดใช้งาน ดังนั้น หากคุณมีเมตาไฟล์ที่มีการดำเนินการแรสเตอร์ แต่คุณไม่ต้องการใช้การจำลองการดำเนินการแรสเตอร์และยังต้องการรับเอาต์พุตเวกเตอร์พร้อมกราฟิกที่แทนที่ ให้เลือก MetafileRenderingMode.Vector.