Ir para conteúdo


Foto

Problema com mensagem usando GDIPlus


  • Por favor, faça o login para responder
47 respostas neste tópico

#21 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 04 maio 2017 - 11:24

@FábioiGames


Mas tem que usar o último parâmetro em 1 assim:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Fico feliz que ajudou em algo, fica a correção ai então  :like_icon:



#22 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 04 maio 2017 - 03:46

Sensacional @joelson0007 deu tudo certo aqui só não consegui acertar a transparência pois tem parte da imagem .png que não tem transparência e mesmo assim da prá ver o que está em baixo, qual valor deixa a imagem aparecendo 100% nas partes que não tem transparência?

 

 

SetBitmap($hGUI, $hBmp2, 500);  <== Em 500 a transparência quase sumiu mas acima disto volta a ficar transparente!



#23 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 178 posts
  • LocationSão Paulo / SP

Postado 04 maio 2017 - 07:59

Peguei um exemplo que mostra uma imagem e um um texto usando GDIPlus mas encontrei 3 problemas e só consegui resolver um deles, o primeiro era limpar a mensagem anterior para mostrar a próxima e este eu resolvi ocultando e depois mostrando novamente a GUI filha porém o segundo que é trocar a cor da fonte e o 3º que é um serilhado branco em algumas letras também não consegui tirar, segue o script para teste!

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Obs: O serilhado ficou visível na letra "S, O" e no número "1"

 

Acho que os três problemas citados no tópico já foram solucionados:  :D

 

* Limpar a mensagem anterior para setar uma nova.

* Trocar a cor da fonte.

* Serrilhado na fonte.

 

Segue exemplo com a contribuição de cada um:

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

  22,66K   2 Downloads   :P

 

Obs: Essa  #include "_GDIPlus_com_Cores.au3"  é da Versão AutoIt 3.3.9.4 para facilitar para o nosso amigo Belini que usa essa versão , mas funciona normal nas versões recentes até agora como por exemplo: 3.3.14.2.  :guitar:

 

Nota: Use essa Include que está junto ou se quiser é só colocar oque alterei na include original  #include <GDIPlus.au3> que fica na pasta include da instalação.  :up:

 

Faltou o @Luigi , cadê tu man ?  Você que é Fera em GDIPlus.  :lol:

 

GDI+ é D+ vou usar bastante nos projetos agora quando necessário.  B)

 

:ILA2:


Editado por Fábio iGames, 04 maio 2017 - 08:05 .


#24 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 1

  • Membros
  • PipPip
  • 185 posts
  • LocationBrazil

Postado 04 maio 2017 - 08:37

Agora atualiza o valor e o tamanho do path. Nao achei nem no help.

#25 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 1

  • Membros
  • PipPip
  • 185 posts
  • LocationBrazil

Postado 04 maio 2017 - 08:47

Noa consegui editar o post pelo cel. Ow Fabio. Ja q a dll ja esta chamada na biblioteca, entao so usar ela na call. O nome dela foi trocada para $_g_hGDIPDLL.

#26 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 178 posts
  • LocationSão Paulo / SP

Postado 04 maio 2017 - 09:02

Agora atualiza o valor e o tamanho do path. Nao achei nem no help.

 

 

Que path é esse que está falando ?

 

Você está falando do exemplo de texto com borda ?

 

 

Noa consegui editar o post pelo cel. Ow Fabio. Ja q a dll ja esta chamada na biblioteca, entao so usar ela na call. O nome dela foi trocada para $_g_hGDIPDLL.

 

 

De Boa , essa versão de GDIPlus é da Versão 3.3.9.4 , para o nosso Amigo Belini.  ;)

 

Mas então se quiser pode usar a #include <GDIPlus.au3>  original ai de Boa, é só descomentar.  :lol:

 

E também descomentar a parte das Cores Constantes que já funciona sem essa _GDIPlus_include_com_Cores.au3 que coloquei ai.  :P

 

Ficou show , com a cooperação e experiência de cada um para chegar a um resultado satisfatório.  :up:


Editado por Fábio iGames, 04 maio 2017 - 09:04 .


#27 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 1

  • Membros
  • PipPip
  • 185 posts
  • LocationBrazil

Postado 04 maio 2017 - 09:40

Vc pode trocar isso

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

por isso, melhor. A função já vem com o return e já verifica se tem erro.

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

O path que eu disso foi

 

Primeiro vc cria um Path

_GDIPlus_PathCreate()

 

Depois vc adiciona uma string já informando a posição, fonte, layout e tudo mais

_GDIPlus_PathAddString

 

ai depois vc escreve a string do modo que vc quiser. Fundo ou borda.

_GDIPlus_GraphicsFillPath($hBuffer, $hPath, $hBrush_preto)
_GDIPlus_GraphicsDrawPath($hBuffer, $hPath, $hPen_white)

 

No exemplo que eu postei eu não uso esse sistema, eu simplesmente desenho uma string direto

_GDIPlus_GraphicsDrawStringEx

 

Desenhando uma string direto eu consigo editar o varlor, o tamanho e a cor constantemente, mas não consigo colocar borda. E do modo que eu disse ali em cima criando um path e adicionando uma string eu não consegui modificar o valor da string em um loop, o consumo de memória fica nas alturas se eu redesenhar o _GDIPlus_PathAddString constantemente.

 

 

Esse negocio de GDI é um saco quando o programa vai crescendo, vc precisa ficar filtrando o que redesenha e o que não, ai não pode ficar redesenhando nada constantemente se não o FPS fica baixo e alguns computadores antigos não suportam, principalmente os que usam XP


Editado por Pedro Pinheiro, 04 maio 2017 - 09:48 .


#28 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 178 posts
  • LocationSão Paulo / SP

Postado 04 maio 2017 - 10:53

Vc pode trocar isso

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

por isso, melhor. A função já vem com o return e já verifica se tem erro.

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

O path que eu disso foi

 

Primeiro vc cria um Path

_GDIPlus_PathCreate()

 

Depois vc adiciona uma string já informando a posição, fonte, layout e tudo mais

_GDIPlus_PathAddString

 

ai depois vc escreve a string do modo que vc quiser. Fundo ou borda.

_GDIPlus_GraphicsFillPath($hBuffer, $hPath, $hBrush_preto)
_GDIPlus_GraphicsDrawPath($hBuffer, $hPath, $hPen_white)

 

No exemplo que eu postei eu não uso esse sistema, eu simplesmente desenho uma string direto

_GDIPlus_GraphicsDrawStringEx

 

Desenhando uma string direto eu consigo editar o varlor, o tamanho e a cor constantemente, mas não consigo colocar borda. E do modo que eu disse ali em cima criando um path e adicionando uma string eu não consegui modificar o valor da string em um loop, o consumo de memória fica nas alturas se eu redesenhar o _GDIPlus_PathAddString constantemente.

 

 

Esse negocio de GDI é um saco quando o programa vai crescendo, vc precisa ficar filtrando o que redesenha e o que não, ai não pode ficar redesenhando nada constantemente se não o FPS fica baixo e alguns computadores antigos não suportam, principalmente os que usam XP

 

Pedro você não entendeu , eu fiz esse exemplo utilizando a mesma versão de AutoIt que o Belini usa , que é a 3.3.9.4 , e nela não tem esse exemplo da função: _GDIPlus_GraphicsSetTextRenderingHint  :lol: 

 

Nem adianta procurar, é por isso que estou adaptando algumas coisas que tem na versão recente pro Belini usar com a Versão 3.3.9.4. ;)

 

Essa função realmente faz a mesma coisa que a chamada de DLL que o joelson0007 deu a dica.  :guitar:

 

Adaptei agora para as duas versões: 3.3.9.43.3.14.2 , já está testado e nem precisa de nada por fora , é só copiar , colar , testar e usar.  :like_icon:

 

GDI+ Texto Corrigido - By BeFaJoPe_2.au3

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Sobre o Path depois vou ver pois as coisas estão corridas por aqui , graças a DEUS né ?!!! :like_icon:

 

Ainda vou adaptar o exemplo de texto com borda para a versão antiga que o Belini usa, pois tem que ver tudo de include nova que falta e funções, talvez seja simples igual esse último exemplo que postei agora.  :600866:

 

Pois é , tem que prestar muita atenção com GDI+ para não ficar pesado mesmo, mas está sendo bem gratificante todo esse aprendizado.  :guitar:   


Editado por Fábio iGames, 04 maio 2017 - 10:58 .


#29 Pedro Pinheiro

Pedro Pinheiro

    Membro Nível 1

  • Membros
  • PipPip
  • 185 posts
  • LocationBrazil

Postado 05 maio 2017 - 12:50

Fabio. Qualquer coisa da biblioteca gdiplus recente roda na vrrsao antiga. A biblioteca so foi criada para facilitar o chamar da funcao. Antigamente o pessoal ficava chamando as funcoes como o Joelson00007 fez.

#30 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 05 maio 2017 - 07:09

E sobre a opaticidade alguém sabe como fazer pra ter transparência só onde realmente é transparente na foto?

#31 Fábio iGames

Fábio iGames

    AutoIt MVP

  • AutoIt MVPs (MVP)
  • PipPip
  • 178 posts
  • LocationSão Paulo / SP

Postado 05 maio 2017 - 10:38

Fabio. Qualquer coisa da biblioteca gdiplus recente roda na vrrsao antiga. A biblioteca so foi criada para facilitar o chamar da funcao. Antigamente o pessoal ficava chamando as funcoes como o Joelson00007 fez.

 

Se você tiver essa versão que te falei que o Belini usa , pega a  #include <GDIPlus.au3> da Versão 3.3.14.2 e joga na pasta include da versão 3.3.4.9... :P 

 

Vai dar muito erro por falta de outras includes , e mesmo que você pegue essas outras includes novas , algumas funções sofreram modificações e tal.  :lol:

 

A include GDIPlus da Atual 3.3.14.2 tem 274 KB

 

Já a include GDIPlus da versão 3.3.9.4 tem  182 KB

 

Uma diferença considerável , ainda mais que a atual usa #include "WinAPIGdi.au3" e essa chama muitas outras novas ai fica um pouco trabalhoso de ver tudo de diferente e oque realmente usa uma nova função, não que seja difícil, mas é trabalhoso e tem que ter paciência.  :whistle:

 

Vou adaptar a função de GDI+ Texto com Borda pra versão 3.3.9.4 com tempo e paciência pro Belini poder usar também. :like_icon:

 

Por isso coloquei no 1º zip uma include junta que é a da Versão 3.3.9.4 , entendeu.  ;)

:ILA2:


Editado por Fábio iGames, 05 maio 2017 - 10:39 .


#32 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 06 maio 2017 - 07:56

Sensacional @joelson0007 deu tudo certo aqui só não consegui acertar a transparência pois tem parte da imagem .png que não tem transparência e mesmo assim da prá ver o que está em baixo, qual valor deixa a imagem aparecendo 100% nas partes que não tem transparência?

 

 

SetBitmap($hGUI, $hBmp2, 500);  <== Em 500 a transparência quase sumiu mas acima disto volta a ficar transparente!

 

Encontrei: SetBitmap($hGUI, $hBmp2, 0xFF)



#33 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 06 maio 2017 - 12:36

Peguei um exemplo do UEZ que gostei muito porém eu ví que cada imagem que é usada fica aberta pois coloquei prá deletar todas no final do script e por estarem abertas não foram deletadas, vou postar o script e os arquivos para que possam analizar.

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

  237,14K   7 Downloads



#34 Luigi

Luigi

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 594 posts
  • LocationCWB

Postado 07 maio 2017 - 09:08

Caros senhores,

 

Faço apenas uma sugestão, quando se trabalhar com GDI, não é uma boa prática trabalhar com:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Isso consome uma memória danada! Vejam com consumo de CPU do script...

 

Utilizem

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

O AutoIt não resolve (Sleep) menor do que 10 milisegundos.

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Considere:

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

Na tabela acima, um delay de 34 milisegundos, representa mais de 29 renderizações no GDI, quero dizer, apagar tudo, e desenhar de novo 29 vezes em um único segundo, e o olho humano precisa, se eu não estiver enganado de no mínimo 29 FPS para ter a sensação de movimento contínuo.

 

Abaixo de 29 FPS, você já consegue perceber o movimento quadro a quadro.

 

Mas deixar  While True...

Significa que a todo o loop do script, o GDI vai renderizar tudo de novo! Uau! Vai comer recurso!

Pense nisso...

 

@Belini,

 

Está correto supor que você possui uma preocupação em executar o script e não deixar os arquivos de imagens livres para que o usuário possa abrir, correto?

Por isso a preocupação em deletar os arquivos no exemplo do UEZ?

 

Tenho a impressão de que você quer criar uma espécie de animação, tipo um PowerPoint?
Ou como se fosse aqueles finais de filme rolando, em cima da imagem de algo?


Editado por Luigi, 07 maio 2017 - 09:29 .


#35 Manimal

Manimal

    Membro Nível 3

  • Administradores (Adm)
  • PipPipPipPip
  • 321 posts
  • LocationVideira/SC

Postado 07 maio 2017 - 09:48

Apenas acompanhando o tópico!

 

Vcs são feras mesmo! Parabéns a todos que estão ajudando/acompanhado este tópico.

 

Com certeza quando precisar de algo nessa linha vou lembrar dos exemplos e explicações de vcs!

 

desenhar de novo 29 vezes em um único segundo, e o olho humano precisa, se eu não estiver enganado de no mínimo 29 FPS para ter a sensação de movimento contínuo.   Abaixo de 29 FPS, você já consegue perceber o movimento quadro a quadro.

O movimento contínuo é percebido com mínimo de 25 FPS (padrão TV). O nro de 29 FPS é o padrão adotado pelo cinema. Este é o motivo pelo qual o cinema parece mais cool!

 

Atualmente com as placas de vídeo mais modernas e todos os recursos possíveis, o padrão de jogos e filmes está se firmando com 30 fps mínimo!

 

Alguns gamers já são exigentes a ponto de "precisar" de 60 fps, que coincidentemente é a frequência dos nosso monitores (60 Hz). Na maioria dos jogos existe o chamado "limitador vertical" ou "sincronização vertical" que faz exatamente isso: condiciona o máximo de FPS à frequencia em Hz (60) para uma maior experiência.

 

Recentemente o padrão cinematográfico está indo além da maior resolução possível e também se concentrando no número de quadros. Na trilogia do Hobbit, Peter Jackson padronizou seus filmes de 48 a 60 fps, para uma imagem mais suave. E a indústria segue o chefe...



#36 Luigi

Luigi

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 594 posts
  • LocationCWB

Postado 07 maio 2017 - 09:59

@Manimal,

 

É uma grande pena que o AutoIt não seja uma linguagem de grande desempenho na parte do GDI...

Essa do Hobbit eu não sabia, legal!

Por isso a Tauriel estava tão linda! 



#37 joelson0007

joelson0007

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 895 posts
  • LocationGuarapuava - PR

Postado 07 maio 2017 - 11:29

A mirillis tem um player chamado SPLASH 2.0

Por favor Login ou se não possuir um conta Registre-se para ver o conteúdo escondido

 

Esse player consegue fazer uma mesclar os frames, durante a reprodução, até hoje, nunca vi isso em nenhum outro player,

 

Se tiver um hardware bom se consegue fazer com 4k e 8k isso.

 

A como se tivesse um action do adobe photoshop, entre o frame anterior e próximo frame do vídeo, tudo isso usando apenas 20% do processador, (Sim é bastante), mas pra fazer isso em um video 4k em tempo real, é muito pouco.

 

Tem que habilitar a tecnologia motion blur do player, pra ver o efeito.



#38 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 07 maio 2017 - 03:01

@Luigi as imagens que quero deletar ficam imbutidas no script e são copiadas para o disco quando o programa abre e ao encerrar são deletadas para que nenhum usuário troque as telas do programa por outras mas o programa está mesmo muito pesado pois troca telas constantemente, vc conhece algum outro modo de colocar .png numa gui sem usar GDI?

 

OBS: Preciso que a gui fique transparente por completo e só tenha de fundo a imagem .png ou seja que dê para ver o que está debaixo da GUI que tem a imagem .PNG!



#39 Luigi

Luigi

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 594 posts
  • LocationCWB

Postado 07 maio 2017 - 04:19

Hum, eu não estava tão errado assim...

O tiro passou perto.

 

Me parece que você tem a seguinte situação:

* tem imagens dentro do script

* essas imagens são grandes

* necessárias

* mas usa pouco

*** (aqui você usa muito espaço e pouco processamento)

 

Correto?

 

Seria possível?

* em vez de usar uma imagem grande, que usa poucas vezes, usar várias pequenas imagens para re-construir essa imagem grande apenas no momento que for necessário?

*** (aqui você usa pouco espaço e muito processamento)

 

Bem, até o momento quando penso em PNG a única coisa que me vem em mente é GDI (minto, há outras formas, mas realmente eu acho o GDI mais simples).


Editado por Luigi, 07 maio 2017 - 04:27 .


#40 Belini

Belini

    Administrador

  • Administradores (Adm)
  • PipPipPipPipPip
  • 2.202 posts
  • LocationMinas Gerais

Postado 07 maio 2017 - 04:35

São imagens 1024 x 768 mas que usadas comfrequencia por isto extraio elas quando o programa inicia carrego direto do disco quando preciso troca-las e deleto quando o programa fecha, as outras alternativas que vc consomem menos recurso do processador? Tem algum exemplo que eu possa testar?




0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

Documentação OnLine de referência