Página 1 de 1
É possível gerar imagem com o GMS?
Enviado: Qui Ago 18, 2016 12:37 am
por GabrielXavier
É possível editar e gerar uma imagem com o Game Maker Studio, adicionar texto na imagem ou mesmo colocar uma marca d'água na imagem e salvar ela sem ser por meio do print screen da tela?
Oque preciso é fazer a edição da imagem em segundo plano e salva-la em .png
É possível?

Re: É possível gerar imagem com o GMS?
Enviado: Qui Ago 18, 2016 7:32 am
por Denis Lemos
Sim, é possível!
Na época do GM8 eu fiz um editor de textura que tinha até aquela ferramenta de carimbo do Photoshop. A melhor forma é usar surface, vc desenha a sua imagem na surface, faz todas as alterações que for preciso e depois salva essa surface em png. Só lembre de criar a surface do tamanho da sua imagem para manter a resolução.
Docs: suface_save()
Também é possível salvar uma sprite e até mesmo a tela do jogo.
Docs: sprite_save()
Dosc: screen_save()
Re: É possível gerar imagem com o GMS?
Enviado: Sex Ago 19, 2016 12:05 pm
por GabrielXavier
Nossa cara não sabia que as surfaces funcionavam assim, dei uma pesquisada e achei o potencial das surfaces potencial incrível para o app que to em mente, é uma pena que as surfacesse auto destroem quando a janela do jogo perde o foco na tela e isso é um problema.
Obrigado mesmo pela ajuda!
Re: É possível gerar imagem com o GMS?
Enviado: Sex Ago 19, 2016 1:19 pm
por Denis Lemos
Na verdade tem como contornar esse problema, vc pode simplesmente salvar temporariamente a surface em uma sprite antes da tela perder o foco ou depois de alguma mudança usando a função:
sprite_create_from_surface()
ou
sprite_add_from_surface()
background_create_from_surface()
Depois quando a tela recuperar o foco, basta apenas desenhar novamente a sprite na surface e deletar a sprite para não causar vazamento de memória. Eu lembro que eu usei isso para fazer um sistema de Ctrl+Z no meu antigo editor de texturas.
Re: É possível gerar imagem com o GMS?
Enviado: Seg Ago 22, 2016 10:44 pm
por GabrielXavier
Muito interessante esse esquema para contornar este problema.
Como fazer essa verificação se o dispositivo perdeu o foco ou não?
Seria num evento
STEP o código:
Código: Selecionar todos
if os_is_paused(){
se existir a surface { desenha ela em uma sprite};
apaga a surface;
}
else{
se existir a sprite { desenha ela na surface};
apaga a sprite;
}
Esse código funcionaria?
Ou seria melhor em toda alteração que eu fazer na
surface eu salvar ela em uma
sprite?
Qual a logica que você usou para fazer o sistema de CTRL+Z?
Re: É possível gerar imagem com o GMS?
Enviado: Qui Ago 25, 2016 12:49 am
por Denis Lemos
O sistema de Ctrl+Z era muito simples, igual ao do Photoshop que só tem como voltar a ação uma vez. No seu caso, basicamente no exato momento que terminar uma edição na surface você tem que verificar se a sprite usada como cópia de segurança existe e deletá-la para liberar espaço na memória e recriá-la novamente a partir da surface já modificada.
Eu não sei como faz para saber se o app está em foco ou não, pois eu não desenvolvo para dispositivos móveis, mas pelo que eu li na documentação as surfaces são armazenadas na memória de texturas e por isso podem ser destruídas quando a aplicação é minimizada ou perder o foco, mas não quer dizer que elas sempre serão destruídas, só em caso do sistema necessitar de mais memória para outras tarefas ele vai apagar as surfaces para liberar espaço. Então acho que seria melhor apenas verificar se a surface existe ou não usando a função
surface_exists(), a própria documentação do GM:s alerta para em caso de usar ou modificar uma surface, sempre fazer a verificação se a surface existe para evitar erros
Docs: Surfaces. Então caso a surface "não" exista, você precisa criá-la novamente e desenhar a sprite usada como cópia de segurança.
Se você querer fazer o sistema de Ctrl+Z, então "antes" ou quando você "começar" a edição da surface já tem que salvar a surface sem a alteração em uma sprite secundária, para caso a função de "undo" seja usada você pintar essa sprite novamente na surface para anular a modificação.