tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
1505
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von JJB
    JJB JJB ist offline Cogito ergo brumm
    Registriert seit
    Jan 2004
    Ort
    Stuttgart
    Beiträge
    261
    Hallo zusammen,

    ich stehe vor dem Problem, dass ich (enhanced) Windows Metafiles laden oder erzeugen und darin Commentare lesen oder schreiben muss.
    Laut MSDN werden WMF Daten jedoch als PNG Daten verwaltet, da .Net angeblich keinen WMF Encoder besitzt.

    Kann mir jemand sagen, wie ich diese Files laden, erzeugen, kommentieren und auslesen kann ?

    Hier mal ein Versuch zum Erzeugen von EMF Daten mit Kommentar.
    Aus irgendeinem Grund kann ich die EMF/WMF Daten nicht lesen, sondern nur schreiben.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Graphics aGraphics = this.CreateGraphics();                             // Create temporary Graphics object for metafile
    IntPtr aHandle = aGraphics.GetHdc();                                    // Creation and get handle to its device context.
    Metafile aMetaFile = new Metafile(@"test_2.emf", aHandle);              // Create metafile object to record.
    Graphics aMetaGraphics = Graphics.FromImage(aMetaFile);                 // Create graphics object to RECORD metaFile.
     
    aMetaGraphics.DrawRectangle(new Pen(Color.Black, 5), 0, 0, 100, 100);   // Draw rectangle in metaFile.
    byte[] aCommentBytes = { (byte)'T', (byte)'e', (byte)'s', (byte)'t' };  // Create comment and add to metaFile.
    aMetaGraphics.AddMetafileComment(aCommentBytes);
     
    aMetaGraphics.Dispose();                                                // Dispose of graphics object.
    aMetaFile.Dispose();                                                    // Dispose of metafile.
    aGraphics.ReleaseHdc(aHandle);                                          // Release handle to temporary device context.
    aGraphics.Dispose();                                                    // Dispose of scratch graphics object.

    Vielleicht hat jemand eine Idee, wie man darauf zugreifen kann.

    Ich wäre für jede Hilfe dankbar.

    MFG JJB
     
    PS: Ja, ich habe gegoogelt und nein, ich will kein Viagra kaufen
    PPS: Tod allen verketteten Suchmaschinen

  2. #2
    Avatar von JJB
    JJB JJB ist offline Cogito ergo brumm
    Registriert seit
    Jan 2004
    Ort
    Stuttgart
    Beiträge
    261
    Hallo zusammen,

    den ersten Schritt hätte ich. Ein Metafile zu lesen ist kein Hexenwerk und schnell programmiert. Microsoft bietet dafür ein recht gutes Snippet:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
        private Metafile metafile1;
        private Graphics.EnumerateMetafileProc metafileDelegate;
     
        // Der Aufrufe erfolgt über eine Enumeration, welche die RecordSets des Metafiles
        // einzeln abarbeitet und sie in einen Delegate zurückführt.
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.EnumerateMetafile(metafile1, new Point(20, 10), metafileDelegate);
        }
     
        // Der Delegate verweist auf ein Callback Objekt vom Typ EnumerateMetafileProc
        public Init()
        {
            metafile1 = new Metafile(@"C:\Test.wmf");
            metafileDelegate = new Graphics.EnumerateMetafileProc(MetafileCallback);
        }
     
        // Das einzelne Record kann nun hier unterschieden werden und einer PlayRoutine 
        // übergeben werden. So kann das Metafile Schrittweise "gemalt" werden.
        private bool MetafileCallback(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData)
        {
            byte[] dataArray = null;
            if (data != IntPtr.Zero)
            {
                dataArray = new byte[dataSize];
                Marshal.Copy(data, dataArray, 0, dataSize);
            }
     
            metafile1.PlayRecord(recordType, flags, dataSize, dataArray);
     
            return true;
        }

    Ich habe derzeit noch das Problem, dass ich die Records nicht einfach in ein anderes Metafile überführen kann, als würde ich eine flache Kopie erzeugen.

    Sprich, ich kann mit diesen Records nicht wirklich was anfangen. Denn ich kann sie nicht in schreiben.

    Hat jemand eine Idee, wie man Records aus einem Metafile extrahieren und in ein anderes einfügen kann ?

    Besten Dank, JJB
     
    PS: Ja, ich habe gegoogelt und nein, ich will kein Viagra kaufen
    PPS: Tod allen verketteten Suchmaschinen

Ähnliche Themen

  1. Bilder dynamisch laden und in MovieClip laden
    Von Nambot im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 28.02.08, 19:38
  2. Antworten: 5
    Letzter Beitrag: 05.07.06, 14:09
  3. Inhalt laden, ohne Design neu zu laden..?!
    Von RuffY2k im Forum HTML & XHTML
    Antworten: 1
    Letzter Beitrag: 30.04.05, 11:13
  4. externe flash datei laden in ein content laden!
    Von F-unit im Forum Flash Plattform
    Antworten: 17
    Letzter Beitrag: 14.12.04, 15:11
  5. Ext TXT von FP laden
    Von xamunrax im Forum Flash Plattform
    Antworten: 14
    Letzter Beitrag: 27.01.02, 14:29