प्रश्न का उत्तर दिया गया था। अधिक जानकारी के लिए, इस पाठ के अंत में संपादित करें # 4 देखें।योजक मिश्रण के साथ चित्रकारी चित्र
हम वर्तमान में गेममेकिंग इंजन पर काम कर रहे हैं जो बहुत अच्छी तरह से चल रहा है। मैं एनीमेशन निर्माता पर काम कर रहा हूं और सोच रहा था कि क्या मिश्रित मिश्रण के साथ एक छवि खींचना संभव था।
मुझे समझाएं।
हम सिस्टम का उपयोग करते हैं। सी # की लाइब्रेरी ड्रॉइंग और हम विंडोज फॉर्म के साथ काम करते हैं। अभी के लिए, उपयोगकर्ता एक फ़्रेमयुक्त एनीमेशन छवि (एनीमेशन के प्रत्येक फ्रेम वाली एक छवि) आयात करके अपनी एनीमेशन बनाने में सक्षम है और उपयोगकर्ता जहां चाहें इन फ्रेम को खींच और छोड़ सकता है।
वास्तविक समस्या यह है कि हम समझ नहीं सकते कि मिश्रित मिश्रण के साथ फ्रेम कैसे आकर्षित किया जाए।
यदि आप इसे प्राप्त नहीं करते हैं तो क्या जोड़ना मिश्रण है इसका एक उदाहरण यहां दिया गया है। मैं आपको दोष नहीं दूंगा, मुझे अंग्रेजी में कठिन समय लिखना है।
हम पैनल पर या सीधे फॉर्म पर आकर्षित करने के लिए निम्न विधि का उपयोग कर रहे हैं। यहां उदाहरण के लिए नक्शा संपादक के लिए एक टाइल नक्शा खींचने के लिए कोड है। चूंकि एनीमेशन मैनेजर कोड एक गड़बड़ है, यह इस उदाहरण के साथ स्पष्ट होगा।
using (Graphics g = Graphics.FromImage(MapBuffer as Image))
using (Brush brush = new SolidBrush(Color.White))
using (Pen pen = new Pen(Color.FromArgb(255, 0, 0, 0), 1))
{
g.FillRectangle(brush, new Rectangle(new Point(0, 0), new Size(CurrentMap.MapSize.Width * TileSize, CurrentMap.MapSize.Height * TileSize)));
Tile tile = CurrentMap.Tiles[l, x, y];
if (tile.Background != null) g.DrawImage(tile.Background, new Point(tile.X * TileSize, tile.Y * TileSize));
g.DrawRectangle(pen, x * TileSize, y * TileSize, TileSize, TileSize);
}
वहाँ एक additive चित्र के साथ और यदि ऐसा है तो एक छवि ड्राइंग के संभावित रास्ता नहीं है, मैं अगर किसी ने मुझे बाहर कैसे बात कर सकता है हमेशा के लिए आभारी होंगे। धन्यवाद।
संपादित करें # 1:
छवियों ड्राइंग के लिए, हम एक रंग मैट्रिक्स का उपयोग कर रहे रंग और alph (अस्पष्टता) इस तरह स्थापित करने के लिए:
ColorMatrix matrix = new ColorMatrix
(
new Single[][]
{
new Single[] {r, 0, 0, 0, 0},
new Single[] {0, g, 0, 0, 0},
new Single[] {0, 0, b, 0, 0},
new Single[] {0, 0, 0, a, 0},
new Single[] {0, 0, 0, 0, 1}
}
);
हो सकता है कि रंग मैट्रिक्स के लिए इस्तेमाल किया जा सकता additive मिश्रण?
संपादित करें # 2:
बस महेश चंद द्वारा this लेख पाया।
आगे ब्राउज़ करने के बाद, रंगीन मैट्रिक्स के साथ यह संभव नहीं हो सकता है, भले ही यह रंग परिवर्तन के संबंध में बहुत कुछ पूरा कर सके। समाधान मिलने पर मैं अपने स्वयं के प्रश्न का उत्तर दूंगा।
आपकी मदद के लिए धन्यवाद।
संपादित # 3:
XNA सम्मिश्रण के बारे में दस्तावेज़ here का एक बहुत है। मुझे एक छवि के प्रत्येक पिक्सेल पर मिश्रित मिश्रण को पूरा करने के लिए प्रयुक्त सूत्र मिला।
PixelColor = (स्रोत * [1, 1, 1, 1]) + (गंतव्य * [1, 1, 1, 1])
हो सकता है कि वहाँ वर्तमान संदर्भ में इस सूत्र का उपयोग करने का एक तरीका है? मैं अगले संपादन पर 50 बाउंटी शुरू करूंगा, हमें वास्तव में काम करने की आवश्यकता है।
आपके समय के लिए फिर से धन्यवाद।
संपादित करें # 4
अक्षतंतु के लिए धन्यवाद, अब समस्या हल हो रहा है। XNA का उपयोग करते हुए और उसके Spritebatch, आप Additive सम्मिश्रण ऐसा करने को पूरा कर सकते हैं:
सबसे पहले आप एक GraphicsDevice बना सकते हैं और एक SpriteBatch
// In the following example, we want to draw inside a Panel called PN_Canvas.
// If you want to draw directly on the form, simply use "this" if you
// write the following code in your form class
PresentationParameters pp = new PresentationParameters();
// Replace PN_Canvas with the control to be drawn on
pp.BackBufferHeight = PN_Canvas.Height;
pp.BackBufferWidth = PN_Canvas.Width;
pp.DeviceWindowHandle = PN_Canvas.Handle;
pp.IsFullScreen = false;
device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.Reach, pp);
batch = new SpriteBatch(device);
तब, जब यह नियंत्रण पर या फार्म पर आकर्षित करने के लिए समय (है उदाहरण के लिए OnPaint घटना) के साथ, आप निम्न कोड ब्लॉक
// You should always clear the GraphicsDevice first
device.Clear(Microsoft.Xna.Framework.Color.Black);
// Note the last parameter of Begin method
batch.Begin(SpriteSortMode.BackToFront, BlendState.Additive);
batch.draw(/* Things you want to draw, positions and other infos */);
batch.End();
// The Present method will draw buffer onto control or form
device.Present();
मुझे यकीन नहीं है कि यह सीधे पिक्सेल मूल्यों को छेड़छाड़ किए बिना सीधे ऊपर Winforms में संभव है। ड्राइंग के लिए एक WPF होस्टेड घटक का उपयोग करना एक विकल्प होगा?डब्ल्यूपीएफ में मिश्रण मोड को अधिक आसान बनाने की क्षमता है। – Dervall
@Dervall जितना अधिक हम खोजते हैं उतना ही हम सोचते हैं कि एक WPF होस्टेड घटक का उपयोग करना एक बहुत अच्छा विचार है। हो सकता है कि विनफॉर्म के साथ सीधे बाय-पिक्सेल अलगो का उपयोग किए बिना कोई समाधान न हो। या शायद कोई किसी प्रकार के चमत्कार के साथ आएगा? –
संभव डुप्लिकेट [अस्पष्टता के साथ ड्रामाइमेज?] (Http://stackoverflow.com/questions/5519956/drawimage-with-opacity) –