• Jueves 28 de Marzo de 2024, 09:38

Autor Tema:  Leer Un Metafile  (Leído 1703 veces)

toni82

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Leer Un Metafile
« en: Miércoles 29 de Agosto de 2007, 11:01 »
0
Hola buenas, estoy intentando leer un wmf en C# tengo el siguiente código pero algo no acaba de funcionar, cuando lo ejecuto me muestra el formulario vacio sin la imagen wmf.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;
using System.Data.SqlClient;

namespace DrawMetafile
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           
                    Graphics g = this.CreateGraphics();
                    g.Clear(this.BackColor);

                    Metafile curMetafile = new Metafile("image.wmf");

                    g.DrawImage(curMetafile, 0, 0);

                    g.Dispose();

            }
     
    }
}

g guarda los datos correctamente pero parece que el metodo Dispose no hace nada. Alguien puede ayudarme?

Gracias.

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Leer Un Metafile
« Respuesta #1 en: Miércoles 29 de Agosto de 2007, 16:15 »
0
Hola, te respondo sin estar seguro de si es tu problema, pero por descartar posibilidades.

¿El fichero image.wmf existen el directorio de ejecución de tu programa?. Si no es así, te recomendaría que probaras a ejecutar indicando la ruta absoluta al fichero, para descartar la posibilidad de que lo que te esté pasando sea que no está encontrando el fichero gráfico y por lo tanto te devuelva un "null" o un Metafile vacío, con lo que al intentar dibujarlo no tenga nada que dibujar y por eso no te salga nada.

Esto, aunque pueda parecer obvio, a veces es un punto de quebraderos de cabeza, ya que a veces uno piensa que el directorio de ejecución es un determinado directorio (a veces uno tiende a penasr que es el directorio en que está el código fuente) y resulta que luego es otro (normalmente el directorio donde se han compilado los binarios, por ejemplo "\debug\bin".

Si no lo tienes, te recomiendo también que metas el código en un Try/Catch, ya que si es el caso, a lo mejor te esté dando un NullReferenceException y podrás capturarla y ver dónde y por qué te da.

También pondría un punto de ruptura justo cuando lees el Metafile para ver qué ha leído (y ver si realmente ha leído algo).

Saludos y suerte

toni82

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Leer Un Metafile
« Respuesta #2 en: Miércoles 29 de Agosto de 2007, 23:38 »
0
Si como digo g guarda los datos correctamente asi que el error no esta ahi porque si elimino el archivo, es decir si el archivo no existe salta una excepción.

De todas maneras gracias por la ayuda.

A ver si alguien puede ayudarme en el tema que no encuentro solución, ando un poco verde con el tratamiento de gráficos en C#.

Saludos

Neopro

  • Miembro MUY activo
  • ***
  • Mensajes: 316
    • Ver Perfil
Re: Leer Un Metafile
« Respuesta #3 en: Jueves 30 de Agosto de 2007, 00:26 »
0
Yo trabajo con imágenes y cuando son formatos especiales no lo hago de esa forma, hay otras maneras, en la cual C# dibuja pixel a pixel (realmente no se nota), pero creo que tu problema va en mostrar la imagen, ya que como dices están bien los datos en la variable.
              [size=109]"Has lo que digo y no hagas lo que hago"[/size]

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Leer Un Metafile
« Respuesta #4 en: Jueves 30 de Agosto de 2007, 13:31 »
0
He estado mirando tu código y me surge una duda.

¿Tu código es tal y como lo has puesto o faltan cosas?. En el caso que sea tal y como lo has puesto, creo que problema va a venir porque has puesto el código que dibuja dentro del propio constructor del formulario, y por eso no te lo dibuja.

Prueba a meter el código que dibuja fuera del constructor, en una función cualquiera o pon un botón que cuando lo pulses sea el que lo dibuje. Si haciendo esto sí que te sale bien, entonces ése es el problema. Quizá dentro del constructor no puedes dibujar de esta forma o a lo mejor hay que hacer alguna otra cosa para poder dibujar (no estoy muy puesto en programación gráfica).

Ya nos contarás cómo sale la prueba.

Saludos

Scherzo

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
    • http://www.mma-spain.com
Re: Leer Un Metafile
« Respuesta #5 en: Jueves 30 de Agosto de 2007, 13:39 »
0
Se me olvidaba, lo que comentas del método Dispose(). Es normal que no haga nada (aparentemente), pero al ejecutar el método lo que estás haciendo es decirle al objeto que libere los recursos que tenga ocupados, así quedan libres para ser utilizados donde se necesiten. Y si después del Dispose() haces un

Código: Text
  1. g = null;
  2.  

entonces ya le estás diciendo al recolector de basura que ese objeto ya no lo quieres y que liberas la memoria que está usando, para que así cuando lo considere oportuno lo destruya.

Esto último no es imprescindible porque cuando sales del ámbito de creación del objeto automáticamente es igualado a null, pero a veces es buena práctica dejar explícito que solicitas su destrucción porque ya no lo necesitas.

Saludos

toni82

  • Nuevo Miembro
  • *
  • Mensajes: 18
    • Ver Perfil
Re: Leer Un Metafile
« Respuesta #6 en: Domingo 2 de Septiembre de 2007, 23:03 »
0
Gracias por todas las respuestas, al final lo que hice es ponerlo fuera del constructor como comento alguno de los "foreros" y lo puse en el evento paint del controly sin problemas.

Gracias a todos!

Saludos