O
Graphos 4 win
Monte uma versão especial do Graphos e de quebra aprenda truques de programação gráfica

Não podia deixar de existir uma versão for windows do Graphos III, é claro, mas com uma abordagem totalmente diferente da que foi adotada para todas as outras versões. Manteremos a didática, o propósito educacional e a programação aberta, como foi planejado para o primeiro Graphos, ainda no tempo do TRS 80.

Já vai longe o tempo no qual bastava um editor gráfico bom para resolver qualquer trabalho artístico feito no computador. Em nossos dias, um profissional do ramo deve dispor de um bom conjunto de ferramentas de edição. É natural, pois nenhum software consegue prover o usuário de todas as necessidades. Se assim fosse, o programa certamente seria uma monstruosidade em termos de megabytes. Outra razão para o uso de vários softwares é que cada um é sempre muito bom em determinados aspectos e fraco em outros. Desta forma, o uso de diversos sistemas nos dá uma cobertura ampla de todas as necessidades.

Apesar da diversidade de programas, no dia a dia não é raro nos depararmos com aquele recurso especial que nenhum programa tem. As vezes é uma coisa tão simples que a indústria do software se esquece de implementá-lo. Outras vezes trata-se de um recurso tão específico que nem vale a pena adicioná-lo ao pacotão comercial.

Quer um exemplo? Numa redução de cores, todos os filtros atuais tomam como base cada ocorrência de cor. Eles não fazem antes uma avaliação de qualidade. Cores com valores RGB próximos (geralmente com um ou dois pontos de distinção entre os componentes) poderiam ser todas convertidas em uma única cor. Nossos olhos e nossos monitores não notarão a diferença. Faça um teste: veja se consegue distinguir a diferença entre as cores abaixo. Aqui a precisão do computador pode gerar uma redução de baixa qualidade, gerando dithering nas imagens quando bastava uma acomodação nos tons.

Outro exemplo? A grande maioria dos editores apresentam falhas no trabalho de edição em modo ampliado. Editar uma imagem em modo zoom pode se tornar cansativo não só em decorrência de uma ferramenta imprópria, quanto pela própria característica do software de atuar indiscriminadamente sobre toda a imagem.

Boa parte dos programas atuais permite o recurso dos acréscimos especiais, via plugins. Sem dúvida uma boa solução, mas que padece de um problema grave: os plugins só servem para os programas para os quais foram escritos. Existe um plugin com o recurso que preciso, mas ele foi escrito para o editor X. Como não uso o editor X, não posso usar o tal recurso.

O que proponho nesta versão do Graphos III é simplesmente criar um complemento para nossos editores gráficos prediletos. Ele não será um programa de A a Z da edição gráfica. Será um recurso adicional, que poderá ser implementado pelo usuário como uma função externa. Para quem gosta de programar em Delphi, será uma porta aberta para criar suas próprias funções especiais.

Nesta primeira parte irei apresentar a interface de acesso às imagens e a metodologia de trabalho. Na próximas matérias mostrarei as demais partes de programação e as implementações que forem sendo feitas ao sistema principal.

O ponto principal aqui é usar o Graphos de dentro de um outro editor gráfico. No Windows isto não é problema, pois além da multitarefa, temos o recurso do clipboard. Estando no seu editor gráfico predileto, basta colocar a imagem no clipboard e entrar no Graphos. Ao terminar uma operação, colocamos novamente a imagem no clipboard e retornamos ao nosso editor predileto. Nada de misterioso, fantástico, inusitado ou sobrenatural. Com a qualidade dos programas que dispomos hoje, os bons resultados são dependentes da capacidade e da criatividade de uso dessas ferramentas e não da gama de recursos que elas disponibilizam.

Voltando ao nosso caso específico, o primeiro passo é aprender (se ainda não sabe) como recuperar uma imagem do clipboard do Windows e como recolocá-la lá, para uso posterior.

O clipboard é um objeto que precisa ser declarado na seção uses do formulário. Do modo como estamos montando o Graphos, basta criar uma seção uses logo após a declaração implementation:

implementation
{$R *.DFM}

uses
  Clipbrd;

var
  Buff: TBitmap;
  Px,Py,Tx,Ty: integer;

O conjunto de variáveis globais definido aqui serve para indicar (Px e Py) a posição corrente do cursor do mouse, dentro da imagem; a largura (Tx) e altura (Ty) da imagem e o buffer na memória onde estarão os pixels. Usarei dois sistemas: um TBitmap em memória para obter maior velocidade de processamento no acesso à imagem e um objeto TImagem, para mostrar o conteúdo do TBitmap para o usuário.

A partir deste ponto podemos usar o recurso de trocar imagens com qualquer editor gráfico. Alguns dispõem de um sistema de clipboard autônomo, então será necessário ajustá-lo para usar o clipboard do Windows. Outra coisa a ser lembrada neste ponto é que, para uma melhor performance do sistema, é aconselhável trabalhar sempre com imagens em true-color, ou seja, com formato de 16 milhões de cores.

Apesar de não haver restrições quanto ao tamanho da imagem manipulada, é sempre mais prático trabalhar apenas com as partes que serão diretamente afetadas pela edição. Para isso as ferramentas de cut e paste dos editores são mais que úteis - são imprescindíveis.

{--- Capturando uma tela do clipboard ---}
procedure TForm1.TpasteClick(Sender: TObject);
begin
  if
Clipboard.HasFormat(CF_BITMAP) then begin
    Buff.Assign(Clipboard);
    Tela.Width:= Buff.Width;
    Tela.Height:= Buff.Height;
    Tx:= Buff.Width; Ty:= Buff.Height;
    Buff.SaveToFile('grp3tmp.bmp');
    Tela.Picture.LoadFromFile('grp3tmp.bmp');
  end else begin
    Tela.Width:= 0; Tela.Height:= 0;
  end;
end;

Esta procedure foi colocada num TSpeedButtom para facilitar o trabalho de paste. A imagem deverá ser mostrada, no final, numa TImage, que chamaremos de Tela.

A propriedade HasFormat nos informa se o conteúdo do clipboard está no padrão Bitmap ou não. Os principais valores presentes em HasFormat podem ser:

CF_TEXT - texto onde cada linha termina com um grupo de códigos CR-LF (#13 e #10). Um caracter nulo (0) indica o final do texto;

CF_BITMAP - uma imagem no padrão bitmap do Windows;

CF_METAFILEPICT - um arquivo do tipo metafile do Windows;

CF_PICTURE - um objeto do tipo TPicture;

Note que, antes de passar a imagem para a TImage "Tela", ela foi gravada num arquivo chamado "gr3tmp.bmp". Ele será nosso arquivo temporário de undo e serviu, na procedure que captura a imagem do clipboard, para que a TImage "Tela" fosse adequadamente parametrizada para receber a imagem.

O caminho inverso é feito da seguinte forma:

procedure TForm1.TCutClick(Sender: TObject);
begin
  Clipboard.Assign(Tela.Picture);
end;

Dois botões controlam o copy/paste do sistema e, para facilitar, não iremos usar o sistema de menus. As implementações são feitas a partir de novos botões colocados na barra de comandos superior. Como exemplo, vamos implementar uma função que transforma as cores claras em um tom de vermelho. Veja como isso é feito:

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  Tmx,Tmy: integer;
begin
  Buff.SaveToFile('grp3tmp.bmp');
  for Tmy:= 0 to Ty do begin
    for Tmx:= 0 to Tx do begin
      if
Buff.Canvas.Pixels[Tmx,Tmy] > $F0F0F0 then
        Buff.Canvas.Pixels[Tmx,Tmy]:= clRed;
   
 end;
  end;

  Tela.Canvas.Draw(0,0,Buff);
end;

A manipulação é feita diretamente sobre o Buff (TBitmap), que é salvo antes no arquivo temporário. Sempre que acionamos uma função gravamos o buffer de imagem para funcionar como undo.

Os dois loopings se encarregam de checar se cada pixel está dentro da faixa que iremos modificar. Esse procedimento pode ser usado para qualquer tipo de filtro ou função que desejarmos implementar mais à frente.

É isso aí. As bases para o nosso sistema já estão lançadas. Agora é com você. Aqui daremos algumas funções e implementações especiais. Fique atento para não perder nada.


Download exclusivo...
Clique no link para fazer o download dos arquivos. Se ainda não é assinante, clique aqui e saiba como assinar.

grpwin1.zip ..: 159 Kb
A primeira parte do G3 4 win
 
online