मैं यह समझने की कोशिश कर रहा हूं कि जीडीआई + ग्राफिक्स कंटेनर विभिन्न ग्राफिक इकाइयों के साथ कैसे काम करते हैं। नीचे दिए गए कोड पर एक नज़र डालें। यह संकलित करता है, आप इसे एक नए नए रूप में पेस्ट कर सकते हैं।ग्राफिक कंटेनर कैसे काम करते हैं?
void Form2_Paint(object sender, PaintEventArgs e)
{
var gfx = e.Graphics;
System.Diagnostics.Debug.WriteLine("DpiX={0}, DpiY={1}", gfx.DpiX, gfx.DpiY);
gfx.PageUnit = GraphicsUnit.Inch;
var pen = new Pen(Color.Black, 0.01f);
// Create outer container, 2 inches in size with X and Y set to 0.1 inches
var outerContainer = gfx.BeginContainer(
new RectangleF(0.1f, 0.1f, 2, 2),
new RectangleF(0, 0, 2, 2),
GraphicsUnit.Pixel);
// Draw the outer rectangle
gfx.DrawRectangle(pen, new Rectangle(0, 0, 2, 2));
// Create inner container, 1 inch in size with X and Y set to 0.1 inches
var innerContainer = gfx.BeginContainer(
new RectangleF(0.1f, 0.1f, 1, 1),
new RectangleF(0, 0, 1, 1),
GraphicsUnit.Pixel);
// Draw the inner rectangle
gfx.DrawRectangle(pen, new Rectangle(0, 0, 1, 1));
gfx.EndContainer(innerContainer);
gfx.EndContainer(outerContainer);
}
ऊपर कोड नेस्टेड ग्राफिक कंटेनर का एक बहुत ही सरल उदाहरण है, मैंने कोई स्केलिंग परिवर्तन नहीं किया। यह कैसे प्रपत्र जब रंग हैंडलर ऊपर प्रयोग किया जाता है की तरह लग रहा है:
यह बहुत आसान है। अब, मैं यह वर्णन करने की कोशिश करूंगा कि समस्या क्या है।
public GraphicsContainer BeginContainer(
RectangleF dstrect,
RectangleF srcrect,
GraphicsUnit unit
)
क्या मैं समझने में नाकाम रहने रहा हूँ GraphicsUnit unit
तर्क है:
यह BeginContainer
विधि का एक हस्ताक्षर है।
:
GraphicsUnit गणन कि कंटेनर लिए माप की इकाई को निर्दिष्ट कीसदस्य।
यह सत्य होने के लिए प्रतीत होता है!
जैसा कि आप मेरे कोड में देख सकते हैं मैं इनच इकाइयों का उपयोग कर रहा हूं: gfx.PageUnit = GraphicsUnit.Inch
।
लेकिन, जब मैं कंटेनर बना रहा हूं, तो मैं BeginContainer
विधि: GraphicsUnit.Pixel
पर इकाइयों के तर्क के रूप में गुजर रहा हूं। कंटेनर के निर्माण के बाद क्या होता है? इंच का उपयोग किया जा रहा है (जो मैं वास्तव में चाहता हूं)। लेकिन अगर मैं (या मिलीमीटर या कुछ भी अन्य) को तर्क के लिए पास करता हूं, पिक्सेल का उपयोग किया जाता है। तो, ऐसा लगता है कि जो कुछ मैं चाहता हूं उसे पूरा करने के लिए (इंच का उपयोग करें) मुझे पिक्सल निर्दिष्ट करना होगा?
इससे मुझे कोई समझ नहीं आता है। आप उपरोक्त कोड में BeginContainer
विधियों में इकाइयों को बदलने का प्रयास कर सकते हैं और अजीब परिणाम देख सकते हैं। मैंने एमएसडीएन पढ़ा है और जो कुछ भी मैं इस पर इकट्ठा कर सकता हूं लेकिन मैं अभी भी अनजान हूं।
मैं सॉफ्टवेयर लिख रहा हूं जो जीडीआई + का उपयोग करके बहुत सी चीजें खींचता है और यह प्रिंटिंग उद्देश्यों के लिए मिलीमीटर इकाइयों का उपयोग कर रहा है - जब मैंने कंटेनरों का उपयोग शुरू किया तो मुझे आश्चर्य हुआ कि मुझे स्पष्ट रूप से पिक्सेल को इकाइयों के रूप में निर्दिष्ट करने की आवश्यकता है। मैं वास्तव में किसी भी प्रिंटिंग कोड पर संदिग्ध हूं जहां पिक्सेल का उल्लेख किया गया है। यह होना चाहिए कि मुझे इस मामले की एक बड़ी गलतफहमी है।
तो, ऊपर दिए गए सभी प्रश्न, मेरा प्रश्न है: इस विधि में unit
तर्क का उद्देश्य क्या है?
परिणाम क्या होना चाहिए? एक 1 पिक्सेल आकार आयताकार? मैं * सोचता हूं * आयताकार जो आप कन्स्ट्रक्टर में उपयोग कर रहे हैं उसके साथ कुछ करने के लिए। यह भ्रमित हो जाता है। – LarsTech
@ लार्स आयताकार इंच इकाइयों में हैं। मैं मूल रूप से मिलीमीटर में अधिक "सामान्य दिखने वाले" आंकड़े रखता था लेकिन मुझे लगा कि डीपीआई डॉट्स प्रति इंच होने के कारण इंच को डीबग करना आसान हो सकता है। फॉर्म पर आप जो आयताकार देखते हैं वे बिल्कुल कंटेनरों का आकार हैं। – bokibeg