Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Cambiar Las Dimensiones De Un Bmp En Memoria

Iniciado por [EX3], 15 de Enero de 2004, 08:30:44 PM

« anterior - próximo »

[EX3]

 Como podria cambiar las dimensiones de una imagen BMP almacenado en memoria y despues guardarlo en un archivo? En principio no he visto ke VB traiga ninguna funcion ni ke su control Picture (no confundir con PictureBox) tenga esa capacidad, asi ke estoy intentando a traves del API de Windows pero no encuentro ninguna funcion que haga tal cosa. Alguien sabe como hacerlo?

Gracias.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Haddd

 Yo siempre he creido que VB estaba enfocada a gestión, y C++ estaba enfocado a la API. Estas cosas que te pasan a ti son el reflejo del pensamiento que tuvieron los creadores del VB y el C++. No luches contra la lógica, no vale la pena. Si tienes que empezar a crearte funciones para el API, creo que es muuuucho mejor que te crees una dll en C++ y qe accedas a ella desde VB.

Yo trabajo en gestión, con VB y es tremendamente complicado hacer cosas que en C++ hago muy rápidamente. Y viceversa, así que cada lenguaje con su "concepto".

Siento no ayudarte, pero hay infinidad de librerías gratuitas que ter permiten manejar un DIB como quieras.

Zaelsius

 Una libreria que estoy utilizando y que puede solucionar tu problema es FreeImage. Es para C++, no sé si te será muy complicado utilizarla desde VB. Siempre puedes mirar los fuentes y coger lo que te interese.

[EX3]

 Mmm pero una libreria externa no me vale, necesitaria codigo para complementar una funcion. Hombre, si al final no me keda mas remedio pos tendre ke usar una libreria externa, pero es algo ke prefiero evitar por el momento, pero gracias por la ayuda  ;)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

fiero

 ¿Las MFC están también en VB? Lo digo por las clases CBitmap, CDC, etc...
www.videopanoramas.com Videopanoramas 3D player

seryu

 si lo qe tienes es un bitmap en memoria y qieres guardalo escalado, hazlo como toda la vida, accedes al array de pixeles y guardas solo una parte de ellos, x ejemplo si es 50% de 2 en 2 pixeles.

qe estas, con dx bajo vb?

[EX3]

 fiero dijo:
Citar¿Las MFC están también en VB? Lo digo por las clases CBitmap, CDC, etc...
Yo diria ke mas o menos si, por ke hay ciertas cosas de las MFC ke recuerdo cuando las di ke en cierta manera las tiene VB.

seryu dijo:
Citarsi lo qe tienes es un bitmap en memoria y qieres guardalo escalado, hazlo como toda la vida, accedes al array de pixeles y guardas solo una parte de ellos, x ejemplo si es 50% de 2 en 2 pixeles.
Eso para aumentar equitativamente las dimensiones tanto de altura como anchura, pero y si kiero aumentar solo la altura o la anchura???

seryu dijo:
Citarqe estas, con dx bajo vb?
Pos si, ando con DirectX por medio. Mi problema es ke cuando cargo texturas ke no son potencia de 2 al guardarlas en memoria sus dimensiones pasan a potencia de 2 y claro, al guardar la textura de nuevo en disco, en un archivo BMP se guarda con las dimensiones ke tiene en memoria.

Mi idea, un tanto chapucera, pa variar xD, era:
1. Guardar la textura en disco con Dx en una ubicacion temporal (C:\Window\Temp de toda vida, por ejemplo)
2. Cargarla en memoria a traves de la API de windows, por ejemplo.
3. Cambiar sus dimensiones.
4. Guardar el BMP modificado en memoria a disco.

Pero me vino otra idea ke no se si funcionara, y era:
1. Crear un ImageSurface en D3D con las dimensiones orginales de la textura
2. Copiar la superficie de la textura en el ImageSurface variando sus dimensiones
3. Guardar el ImageSurface a disco.

Esto se puede hacer o es otra de mis paranoias??? xDDD

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

[EX3]

 [EX3] dijo:
Citar[...]
1. Crear un ImageSurface en D3D con las dimensiones orginales de la textura
2. Copiar la superficie de la textura en el ImageSurface variando sus dimensiones
3. Guardar el ImageSurface a disco.
[...]
Ahora ke he tenido tiempo he probado esto y funciona perfectamente, asi ke me ahorro la chapuza de tener ke guardar primero un BMP con las dimensiones de memoria y tener ke volver a cargarlo para cambiar el tamaño a traves del API de Windows.

Salu2...

P.D.: Ya keda menos para la salida oficial de dx_lib32 1.0...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

Loover

 Lo mejor es utilizar una librería como OpenIl y hacerte una clase que la controle. Así de un plumazo podrás meterle un montozo de filtros tipo photoshop a tus imágenes, escalados, rotaciones, recortes... aparte de poder cargar/grabar cualquier formato.
Si quieres hacerlo manualmente será más complicado. No basta como dice seryu con quitar / poner píxeles. Si quieres que quedé bien debes usar una serie de filtros y algoritmos. Quizás encuentres algo revisando tutoriales antiguos de programación gráfica.
Un saludo!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

[EX3]

 Hombre, de la manera ke lo tengo hecho el resultado es optimo, ya ke guarda la textura redimensionada con suavizado de pixeles o lo ke es lo mismo, con antialiasing. Lo ke posiblemente añada dentro de un tiempo sea Bumpmaping, aunque antes tengo ke ver si merece la pena o no aplicarlo en un motor 2D.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.