Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Captura De Pantalla

Iniciado por [EX3], 06 de Enero de 2004, 05:26:42 AM

« anterior - próximo »

[EX3]

 Weno, visto ke el modulo grafico de la dx_lib32 ya rinde bien a 4x de antialiasing en mi ekipo paso a otro problemilla ke no logro solucionar, la captura de pantalla. Como se realiza una captura de pantalla en D3D?

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

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

[Over]

 Hola.



 IDirect3DSurface8* FrontBuffer;

 m_pD3DDevice->CreateImageSurface(ancho,alto, D3DFMT_A8R8G8B8, &FrontBuffer );  
 
 m_pD3DDevice->GetFrontBuffer(FrontBuffer));
 D3DXSaveSurfaceToFile(FileName,D3DXIFF_BMP,FrontBuffer, NULL, NULL);

   
RELEASE(FrontBuffer);


Supongo que habrá varias formas de hacerlo.

También puedes hacer capturas escalables, si te interesa dilo.

Chao.  

[EX3]

 Lo del Getfrontbuffer() lo probe pero al crear la superficie lo hice con el metodo CreateTexture() y luego haciendo un puntero a la superficie de la textura, ya ke lo ke busco es guardarla en un array de texturas, pero sera posiblemente la razon por la ke no me funcionaba. Probare esto cuando pueda, gracias  ;)

Por cierto, a ke te refieres exactamente con captura escalables?
Y otra cuestion, el NULL de C++ a ke ekivale en VB??

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

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

Loover

IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

[EX3]

 Loover, en VB algunas funciones no admiten ke le pases como parametro 0 o ByVal 0 si por ejemplo el parametro es de tipo RECT. Digo yo ke daria el mismo efecto si pasara una variable del tipo del parametro pero sin inicializar, no?

A ver [Over], el codigo ke me pasastes traducido a VB creo ke seria una cosa asi:
Citar'IDirect3DSurface8* FrontBuffer;
Dim FrontBuffer As Direct3DSurface8

'm_pD3DDevice->CreateImageSurface(ancho,alto, D3DFMT_A8R8G8B8, &FrontBuffer );
Set FrontBuffer = D3DDevice.CreateImageSurface(640, 480, D3DFMT_A8R8G8B8)

'm_pD3DDevice->GetFrontBuffer(FrontBuffer));
Call D3DDevice.GetFrontBuffer(FrontBuffer)

'D3DXSaveSurfaceToFile(FileName,D3DXIFF_BMP,FrontBuffer, NULL, NULL);
Dim NULL_PAL As PALETTEENTRY 'Variable sin inicializar para simular el NULL.
Dim NULL_RECT As RECT 'Variable sin inicializar para simular el NULL.
Call D3DX.SaveSurfaceToFile(App.Path & "\Captura.bmp", D3DXIFF_BMP, FrontBuffer, NULL_PAL, NULL_RECT)
   
'RELEASE(FrontBuffer); //Aqui me imagino que lo ke hareis sera borrar el contenido de la superficie, no?
Set FrontBuffer = Nothing
Tal y como lo tengo me da error al salvar la superficie en el disco. Puede tratarse de NULL_PAL y de NULL_RECT??

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

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

jaure

 Hola

[EX3] Prueba con la constante, 'vbNullString'



A ver si funciona.

Ta luego.

[EX3]

 vbNullString es equivalente a "" y solo se usa cuando el parametro es un String o cadena de texto, 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

Loover

 No sé en VB pero en c++ y programando con la dx9 NULL viene definido como cero. Con solo poner el cursor encima me lo dice porque tengo el visual assit.

Un saludo!
IndieLib Libreria 2.5d utilizando aceleración por hardware para la programación de juegos 2d.
Indie Rover The monkeys are reading!

jaure

 Hola

Para mi que esta función no es compatible con visual basic, o no la han querido hacer compatible, porque viendo su homóloga pero en dirección contraría es decir cargar una superficie de un fichero, la definición es esta.

object.LoadSurfaceFromFile( _
   DestSurface As Direct3DSurface8, _
   DestPalette As Any, _
   DestRect As Any, _
   SrcFile As String, _
   SrcRect As Any, _
   Filter As Long, _
   ColorKey As Long, _
   SrcInfo)


Si te fijas los parametros Rect, y de Paleta estan como tipo de datos Any, al cual si que se le puede pasar un 'ByVal 0', para emular el null de C.

En cambio la función SaveSurfaceToFile, no han creado una función para compatibilizar los valores NULL, es decir es la misma que la de C, con lo cual creo que habrá que dar valores al parametro PALETTEENTRY, y RECT, imposibilitando que sean nulos.
Si te das cuenta en la documentación de esta función para VB, ni siquiera aparece, por lo menos en mi fichero de ayuda del SDK para VB.

Estos de microsoft, ya que se ponen podrían terminar bien el trabajo, y no dejarnos a medias. O todo DirectX, para VB o nada, pero no que encima estemos viendo si han implementado función a función.


Ta luego, es un placer intentar ayudar en algo con mis pocos conocimientos de DirectX  :)

BeRSeRKeR

 A esa función, efectivamente no puedes dejar esos dos parámetros a NULL pero puedes pasarle sin problemas una paleta sin inicializar. Aquí tienes un ejemplo de cómo capturar el front buffer y guardarlo en un archivo. No sé si hará lo que quieres. Supongo que sí.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

jaure

 Pos tienes razon la paleta no hace falta inicializarla, pero la estructura RECT si, sería esto lo que le daba el error en el ejemplo anterior que declaraba un Rect sin dar dimensiones.

Ta luego.

[EX3]

 Gracias por el codigo, BeRSeRKeR. He probado el codigo del ejemplo que me has pasado y funciona perfectamente menos por un detalle un tanto peculiar. En pantalla completa lo realiza sin problemas pero en modo ventana realiza una captura completa de la pantalla, no solo de la ventana. Se puede solucionar esto ultimo a traves de d3d o hay que andar modificando los valores de la variable de tipo RECT??

jaure, por muy burros ke sean los de Microsoft (por ke en ciertas cosas lo son) no creo ke sean tan cazurros como para pasar una funcion de C++ a VB sin ke esta sea compatible.

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

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

[EX3]

 jaure: dijo:
CitarSi te das cuenta en la documentación de esta función para VB, ni siquiera aparece, por lo menos en mi fichero de ayuda del SDK para VB.

Estos de microsoft, ya que se ponen podrían terminar bien el trabajo, y no dejarnos a medias. O todo DirectX, para VB o nada, pero no que encima estemos viendo si han implementado función a función.
Ahi te doy toda la razon, el SDK para VB esta muy incompleto en cuanto a informacion y tb en ke algunos tutoriales del C++ ni se han molestado en pasarlos a VB.

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.