Ir para o conteúdo
sYnced

Tirar Prints

Mensagens Recomendadas

sYnced

Boa tarde,

Eu tenho um problema de momento num projecto que estou a construir, está tudo feito, mas há algo que está a falar que é screenshots a um jogo enquanto estou a jogar, já pesquisei bastante na net mas não encontro nada em concreto, encontrei um programador a falar que talves fosse do aero, então eu desliguei isso enquanto isto tirava o print, e mesmo assim nada.

Se alguém souber uma library ou dll para isso e fácil de usar, que me diga por favor.

Cumprimentos!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

//inicia variáveis
count += 1;
string counter = count.ToString();
int w = GraphicsDevice.PresentationParameters.BackBufferWidth;
int h = GraphicsDevice.PresentationParameters.BackBufferHeight;
//força o desenho de uma frame no buffer
Draw(new GameTime());
//obtem a imagem que foi colocada no buffer
int[] backBuffer = new int[w * h];
GraphicsDevice.GetBackBufferData(backBuffer);

//copia-a para uma textura 2D
Texture2D texture = new Texture2D(GraphicsDevice, w, h, false, GraphicsDevice.PresentationParameters.BackBufferFormat);
texture.SetData(backBuffer);

//grava no disco com o StreamWriter
Stream stream = File.OpenWrite(counter + ".jpg");
texture.SaveAsJpeg(stream, w, h);
//faz o dispose dos objectos
stream.Dispose();
texture.Dispose();
//Dó sustenido é realmente muito cool!

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

Caro Apocsantos, hoje durante a tarde irei testar, porque de momento não me encontro com o Portátil, mas dou te desde já os agradecimentos, pois se funcionar a minha pap fica concluída :)

EDIT***

Bem já estive a testar e na variável count dá erro (não foi declarada antes penso, provávelmente seja evento ou etc).

quanto à biblioteca do GraphicsDevice vou tentar descobrir para não ter a "papa toda feita".

Muito obrigado desde já!

Editado por sYnced

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

Bem estive a pesquisar e também encontrei isto: http://clifton.me/screenshot-xna-csharp/

já descobri que XNA serve para desenvolver jogos também, mas a chamar a biblioteca estou a começar a ficar frustado!

EDIT****

Bem já percebi que tenho de instalar um pacote, mas tenho uma questão, quem usufruir da minha aplicação terá de instalar o mesmo ?

Obrigado.

para quem não sabe e futuras dúvidas é este o pacote:

http://www.microsoft.com/en-us/download/details.aspx?id=23714

Editado por sYnced

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

Podes e deves colocar isso no manifest da tua aplicação como "pre-requisit", para a quando da instalação ser pedido ao utilizador que instale o pacote, caso este não esteja ainda instalado.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

No Visual Studio, com o teu projecto aberto tens na barra do lado direito no solution explorer uma serie de opções. nessas opções tens uma chamada "properties", clicas com o botão direito nessa opção e abre um form com várias tabs e opções. Lá tens em resources os ficheiros todos que fazem parte da tua aplicação e no assembly podes definir o que são "pre-requisites", "included", etc... Neste caso usas "pre-requisites" para que indique ao utilizador que deve instalar o XNA.

Isto basicamente vai alterar o manifest.xml, mas penso que seja mais fácil fazeres as coisas pela interface gráfica.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa tarde,

Ao abrir, se não encontrar o XNA, pede ao utilizador para fazer download, do XNA.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Mostra o resto do código. Não sei conde colocas-te o código exemplo que deixei acima. Aquele código deveria estar num bloco. Só com esse screenshot sem ver onde está inserido o código, não consigo solucionar, sei que existe uma falha, que provavelmente está na estrutura onde o código foi colocado, mas mais do que isso, só "Ligando à Maya"! ;)

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

public void takess()
{
//bool aero = false;
//Prints.ManageAero(aero);
//aero = true;
Random name = new Random();
int num = name.Next(10);
int nom = name.Next(100);
int nem = name.Next(1000);
string[] abc = new string[] { "a", "A", "b", "B", "c", "C" };
string[] abcd = new string[] { "a", "A", "b", "B", "c", "C" };
string[] abcdf = new string[] { "a", "A", "b", "B", "c", "C" };
string[] abcdfg = new string[] { "a", "A", "b", "B", "c", "C" };
string nume = abc[name.Next(abc.Length)] + abcd[name.Next(abcd.Length)] + abcdf[name.Next(abcdf.Length)] + abcdfg[name.Next(abcdfg.Length)];
string nomeprint = txtUsername.Text + "_" + nume + num.ToString() + nom.ToString() + nem.ToString();
CaptureScreen(nomeprint, ImageFormat.Jpeg);
/* int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
string nomeprint = txtUsername.Text + "_" + nume + num.ToString() + nom.ToString() + nem.ToString();
bmpScreenShot.Save(nomeprint + ".jpg", ImageFormat.Jpeg);
Prints.ManageAero(aero);
*/

//string nomeprint = txtUsername.Text + "_" + nume + num.ToString() + nom.ToString() + nem.ToString();
//int w = GraphicsDevice.PresentationParameters.BackBufferWidth;
//int h = GraphicsDevice.PresentationParameters.BackBufferHeight;
////força o desenho de uma frame no buffer
//Draw(new GameTime());
////obtem a imagem que foi colocada no buffer
//int[] backBuffer = new int[w * h];
//GraphicsDevice.GetBackBufferData(backBuffer);

////copia-a para uma textura 2D
//Texture2D texture = new Texture2D(GraphicsDevice, w, h, false, GraphicsDevice.PresentationParameters.BackBufferFormat);
//texture.SetData(backBuffer);

////grava no disco com o StreamWriter
//Stream stream = File.OpenWrite(counter + ".jpg");
//texture.SaveAsJpeg(stream, w, h);
////faz o dispose dos objectos
//stream.Dispose();
//texture.Dispose();
//UploadPrint(nomeprint);

vê os o que está comentado com // até abaixo, pois eu mudei para fazer testes mas ainda não consegui! Obrigado (ps o forum apagou o meu antigo post :O)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Bom dia,

Estás a usar XNA ? A aplicação é consola ou WindowsForms ? Pelo código não consegui perceber. Se estiveres a usar XNA a solução é uma, se estiveres a usar Consola (modo de texto), é outra, e se estivers a usar WindowsForms, outra.

Eu assumi inicialmente que estivesses a usar XNA, pois uma parte considerável dos game developers usa XNA.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

Eu estou a usar windows forms, é para um programa, quero que tire prints a um jogo enquanto ele estiver a jogar e for pedido e só me falta mesmo isso!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Desculpa, mas não entendi bem a resposta, pelo que peço que clarifiques o seguinte: O jogo em causa, está feito em WindowsForms, e o que pretendes é tirar prints do mesmo sempre que for pedido ? Ou estás a desenvolver uma aplicação que tire prints de um jogo feito utilizando uma outra ferramenta ?

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

Estou a desenvolver uma aplicação para tirar prints a jogos, infelizmente eles saiem pretos, descobri uma nova maneira recentemente mas só me tira ao ambiente de trabalho mesmo estando no jogo!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa tarde,

Vamos ver se eu desta vez percebi. Tu queres fazer uma aplicação que retire printscreens de outras aplicações, no caso "Jogos" ????

Esperimenta esta solução, que não faz mais do que um printscreen. Não tenho a certeza se vai funcionar com jogos.

using System.Drawing; 
using System.Drawing.Imaging;
private void PrintScreen()
{ 
   Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
   Graphics graphics = Graphics.FromImage(printscreen as Image);
   graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size);
   printscreen.Save(@"C:\Temp\printscreen.jpg", ImageFormat.Jpeg);
}

Aconcelho a leitura atenta deste artigo, pois lá descreve e tem um excelente exemplo de como obter screenshots recorrendo à API GDI+.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sYnced

O interesse é eu fazer a aplicação a tirar prints sem programas externos.

ApocSantos, não funciona esses saiem pretos, mas eu vi mais um código mas agora tira me screenshots ao ambiente de trabalho, já é bom sinal mas continua a não resultar, pelo que li tenho de importar algo do c++ (dll's) mas não falam em mais nada e eu não sei c++

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

Boa noite,

Viste o link que te deixei ?

Vais precisar de importar a GDI32.dll (que suporta a API GDI+) e a user32.dll que suporta a Windows USER, é possivel que tenhas de usar hooks. Os jogos na sua maioria funciona com OpenGL e DirectX, penso que será isso que esteja a causar dificuldades.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.