2008-11-05 13 views
7

मैं जावा 2 डी में एक वेक्टर छवि ड्रॉइन के आउटपुट को एक एसडब्ल्यूएफ फ़ाइल में सहेजने की कोशिश कर रहा हूं। जावा 2 डी आउटपुट को एसवीजी (बैटिक) और पीडीएफ (इटाक्स्ट) जैसी चीजों के रूप में सहेजने के लिए महान पुस्तकालय हैं लेकिन मुझे एसडब्ल्यूएफ के लिए कोई नहीं मिल रहा है। कोई विचार?जावा 2 डी को एसडब्ल्यूएफ में सहेजें (फ्लैश)

उत्तर

8

मैं सिर्फ Adobe's Flex 3 से SpriteGraphics2D वस्तु का उपयोग कर काम करने के लिए एक उदाहरण मिला है। एफवाईआई ... फ्लेक्स 3 अब खुला स्रोत है।

(SpriteGraphics2D जावाडोक से)SpriteGraphics2DJava2D के Graphics2D एपीआई के एक SWF विशिष्ट कार्यान्वयन है। इस वर्ग के लिए कॉल एक टैगलिस्ट में परिवर्तित हो जाते हैं जिसका उपयोग एसडब्ल्यूएफ स्प्राइट बनाने के लिए किया जा सकता है।

मैं इस इन दो वर्गों CubicCurveTest.java और SpriteTranscoder.java को देखकर पता लगा।

इस उदाहरण को चलाने के लिए आवश्यक केवल दो जार swfutils.jar और batik-awt-util.jar हैं जो downloaded here हो सकते हैं।

यहाँ मेरी उदाहरण कोड है ...

 // Create the SpriteGraphics2D object 
    SpriteGraphics2D g = new SpriteGraphics2D(100, 100); 

    // Draw on to the graphics object 
    Font font = new Font("Serif", Font.PLAIN, 16); 
    g.setFont(font);   
    g.drawString("Test swf", 30, 30);   
    g.draw(new Line2D.Double(5, 5, 50, 60)); 
    g.draw(new Line2D.Double(50, 60, 150, 40)); 
    g.draw(new Line2D.Double(150, 40, 160, 10)); 

    // Create a new empty movie 
    Movie m = new Movie(); 
    m.version = 7; 
    m.bgcolor = new SetBackgroundColor(SwfUtils.colorToInt(255, 255, 255)); 
    m.framerate = 12; 
    m.frames = new ArrayList(1); 
    m.frames.add(new Frame()); 
    m.size = new Rect(11000, 8000); 

    // Get the DefineSprite from the graphics object 
    DefineSprite tag = g.defineSprite("swf-test"); 

    // Place the DefineSprite on the first frame 
    Frame frame1 = (Frame) m.frames.get(0); 
    Matrix mt = new Matrix(0, 0); 
    frame1.controlTags.add(new PlaceObject(mt, tag, 1, null)); 

    TagEncoder tagEncoder = new TagEncoder(); 
    MovieEncoder movieEncoder = new MovieEncoder(tagEncoder); 
    movieEncoder.export(m); 

    //Write to file 
    FileOutputStream fos = new FileOutputStream(new File("/test.swf")); 
    tagEncoder.writeTo(fos); 
+0

यह वास्तव में अच्छा लगता है! आपको लाइसेंस की जांच करने की आवश्यकता होगी, हालांकि, स्रोत प्रकाशित करने का दायित्व लगता है लेकिन यह * लाइब्रेरी में आपके द्वारा किए गए परिवर्तनों के लिए हो सकता है। मैंने इसे विस्तार से नहीं पढ़ा है। – jcoder

1

फ्लैश आमतौर पर एसवीजी का मूल प्रारूप के रूप में उपयोग करता है। आप एसवीजी को निर्यात कर सकते हैं और फिर छवि को एम्बेड और प्रदर्शित करने के लिए एक छोटा फ्लैश प्रोग्राम लिख सकते हैं। लेकिन फ्लैश का उपयोग क्यों करें? अधिकांश ब्राउज़र आजकल एसवीजी प्रदर्शित करने में सक्षम हैं।

संपादित करें: मुझे नहीं पता कि मुझे स्पष्ट रूप से सही उत्तर के लिए क्यों हटाया गया था। मैं समझ नहीं पा रहा हूं कि सबसे अच्छा जवाब नहीं है (मैं पूरी तरह से स्वीकार करता हूं कि यह सोल्यूशन आदर्श नहीं है), लेकिन मुझे नहीं लगता कि यह एक डाउनवोट का हकदार है। आप फ्लेक्स कार्यक्रमों में एसवीजी एम्बेड करने के बारे में this page के बीच में अनुभाग से परामर्श ले सकते हैं। आप में से जो परिचित नहीं हैं, फ्लेक्स एक एडोब टूलकिट/लाइब्रेरी है जो सामान्य फ़्लैश प्लेयर में चलने वाले एसडब्ल्यूएफ प्रोग्राम उत्पन्न करता है। सामान्य फ्लैश पुस्तकालयों के कई (सभी?) इसके लिए उपलब्ध हैं। यह एक्शनस्क्रिप्ट का उपयोग करता है। आपके लिए दुश्मनों के लिए, यहां एक स्निपेट दिखाया गया है कि आप इसे कैसे करते हैं, मैंने लिखा एक फ्लेक्स प्रोग्राम से कॉपी किया। इसे एक एमएक्सएमएल फ़ाइल के अंदर जाना चाहिए।

<mx:Script><![CDATA[ 

[Embed(source="../images/down.svg")] 
[Bindable] 
protected var drillDownImage:Class; 

]]></mx:Script> 

<mx:HBox width="50%" horizontalAlign="right"> 
    <mx:Image id="drillDownButton" source="{drillDownImage}" height="20" width="20" click="drillDown();" /> 
</mx:HBox> 

अब तुम सब करने की जरूरत है लपेट कि एक उचित MXML फ़ाइल में, हो सकता है कुछ नियंत्रण HBox और छवि टैग के लिए संकुल आयात है, और आप के लिए तैयार हैं। आपके द्वारा प्रदान किए गए लिंक में उदाहरण आपके लिए इसे समझने के लिए पर्याप्त होना चाहिए।

+0

मुझे आपके नीचे दिए गए वोटों में से एक मिला है। मेरा फ्लैश डेवलपर (जो केवल फ्लैश करता है, फ्लेक्स नहीं) इस बात से आश्वस्त था कि फ्लैश में एसवीजी का प्रत्यक्ष प्रदर्शन करने का कोई तरीका नहीं था। ऐसा लगता है जैसे फ्लेक्स परिवर्तित हो सकता है (मुझे वास्तव में बैटिक के माध्यम से लगता है) एसवीजी फ्लैश में है लेकिन यह देशी एसएफएफ प्रारूप नहीं है। – wburke

2

Mm, मैं कुछ फ़्लैश सामग्री outputting, या Ming, या यहाँ तक haXe, वह भाषा है जो जावास्क्रिप्ट, फ़्लैश या PHP कोड में "अनुवाद" किया जा सकता है की तरह पुस्तकालयों पता है ... लेकिन मुझे कोई जावा पुस्तकालय पता है।

थोड़ा (मैं उत्सुक हूँ), मैं एक व्यावसायिक Java Graph LibraryJavaSWF2 को शायद बंद स्रोत, जावा में एक फ्लैश प्लेयर, पुस्तकालयों बाद अंक पाया, ActionScript स्रोत कोड या bytecode हेरफेर करने के लिए ... आह, जो माना जाता है सर्च कर रहे हैं एसडब्ल्यूएफ उत्पन्न करने में सक्षम होने के लिए। मुझे एक DrawSWF भी मिला जो उपयोग करता है ... जावाएसडब्ल्यूएफ 2 लाइब्रेरी बैक एंड के रूप में!

पीएस .: Transform SWF भी मिला। उम्मीद तो दिखती है।

0

जहां तक ​​मुझे पता है फ्लैश एसवीजी का उपयोग नहीं करता है। मुझे पूरा विश्वास नहीं है कि उत्तर सही है कि सही है। (लेकिन मैं इसे सिर्फ एक टिप्पणी के रूप में नहीं जोड़ सकता क्योंकि मैं चाहता था कि मेरे पास पर्याप्त अंक न हों ...)

1

शायद यह वह नहीं है जिसे आप ढूंढ रहे हैं लेकिन मैं इसे फेंक दूंगा एक सुझाव -

क्या आपने फ्लैश ड्राइंग एपीआई का उपयोग करके वैक्टर को आकर्षित करने के लिए अपनी जावा आउटपुट एक्शनस्क्रिप्ट बनाने और इसे फ्री फ्लेक्स एएस 3 कंपाइलर का उपयोग करके एसडब्ल्यूएफ फ़ाइल में संकलित करने पर विचार किया है? यदि आप फ्लेक्स लाइब्रेरी का उपयोग नहीं करते हैं तो इसमें से कोई भी शामिल नहीं है। आपका जावा कोड केवल क्रियालेख कोड के लिए टेम्पलेट से घिरे ड्राइंग लाइनों को आउटपुट करेगा।

यह टेस्ट.swf बनाता है जो एक वर्ग खींचता है और मेरे लिए 610 बाइट्स तक संकलित करता है।

यदि आपको मक्खी पर रूपांतरित करने की आवश्यकता है तो यह धीमा होगा लेकिन पूर्ववर्ती चित्रों के लिए यह आसान होगा।

package{ 
    import flash.display.Sprite; 

    public class Test extends Sprite{ 
    public function Test(){ 

     // Start of lines generated by your java 
     graphics.lineStyle(1, 0, 1); 
     graphics.lineTo(100, 0); 
     graphics.lineTo(100, 100); 
     graphics.lineTo(0, 100); 
     graphics.lineTo(0, 0); 
     // End of lines generated by your java 
    } 
    } 
} 
0

चेक बाहर Transform SWF। एपीआई को उपयोग करने के लिए कुछ समय लगता है, लेकिन यह शुरू करने के लिए कुछ वाकई उपयोगी उदाहरणों के साथ आता है। मैंने इसे स्वयं इस्तेमाल किया है और यह बहुत अच्छा काम करता है।

मेरी सलाह जावा 2 डी से एसडब्ल्यूएफ तक जाने के तरीके के रूप में पूरी तरह से एसवीजी को छोड़ना होगा। एसवीजी कि एसटीजी फ्लैश में एसवीजी आयात करने के लिए किए गए समाधानों के साथ बहुत बुरी तरह व्यवहार करता है।

संबंधित मुद्दे