icg(i-bim)-nv [modo de compatibilidade] - univap.bri-bim)-nv.pdf · ... coeficiente ângular em...

110
Universidade do Vale do Paraíba Colégio Técnico Antônio Teixeira Fernandes Disciplina Introdução a Computação Gráfica (ICG) Material I Primitivas Gráficas em 2D, Conceito de pontos pixel, Sistema de 1 cores,linhas retas,Algoritmo DDA,Breseham,Linhas cores e espessuras, Traçando círculos e elipses,Coordenadas polares, preenchimento de áreas, transformações geométricas em duas dimensões, Tratamento Imagens BMP(Mapa de Bits) Site : http://www1.univap.br/~wagner Prof. Responsável Wagner Santos C. de Jesus

Upload: buidang

Post on 02-Dec-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Universidade do Vale do ParaíbaColégio Técnico Antônio Teixeira FernandesDisciplina Introdução a Computação Gráfica

(ICG)

Material IPrimitivas Gráficas em 2D, Conceito de pontos pixel, Sistema de

1

Primitivas Gráficas em 2D, Conceito de pontos pixel, Sistema de cores,linhas retas,Algoritmo DDA,Breseham,Linhas cores e

espessuras, Traçando círculos e elipses,Coordenadas polares, preenchimento de áreas, transformações geométricas em duas

dimensões, Tratamento Imagens BMP(Mapa de Bits)

Site : http://www1.univap.br/~wagner

Prof. Responsável

Wagner Santos C. de Jesus

Page 2: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Computação Gráfica (CG)

• Vem a ser a forma de se fazer umarepresentação da realidade graficamente naresolução de computadores.

2

• A CG vem auxiliando nas mais diversasáreas do conhecimento; facilitando avisualização e simulação de eventos sociais,culturais e científicos.

Page 3: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Algumas áreas de atuação da computação gráfica

• Engenharia – Simulação e CAD

• Bioengenharia – Simulação de crescimento tumoral

• Medicina – Sistemas de eletrocardiograma e Tomografias

• Arte e Cinema – (Efeitos especiais e personagens). Representação de quadros e esculturas

3

Representação de quadros e esculturas

• Fotografia – Processamento de imagens

• Geografia – Sistema informações geográficas

• Arquitetura – Sistemas especializados em plantas de edificações.

• Entretenimento e cultura – Jogos e vídeo games.

• Matemática, Física e estatística.

Page 4: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Simulação de crescimento tumoral

Criação de texturas de pelos de animais

Criação de realidade virtual simulação de deslocamento

Simulador de Gestação

4

simulação de deslocamento humano.

Imagem do leito de um rio

em relevo

Page 5: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criação de modelagem orgânica digital

Sistema de informações geográficas

5

Auto-CAD – Arquitetura e Edificações (AutoDesk)

Simulador Neuro

Cirúrgico

Cena de Praça pública (CCRV)

Page 6: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

6Vista Lateral (Praça Publica CCRV)

Page 7: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Entretenimento (Jogos em 2D)

Tiro ao Alvo Corrida

Estatística e Cinema

7

0

10

20

30

40

50

60

70

80

90

1° Trim 2° Trim 3° Trim 4° Trim

LesteOesteNorte

Gráfico (Estatística)Cinema cena do filme (toyStoy -

1995) -Estúdio: Walt Disney Pictures / Pixar Animation

Studios

Estatística e Cinema

Page 8: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

8

Desenho confeccionado em AutoCad 2D usando conceitos de primitivas básicas.

Page 9: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Filme Shrek

2004 - Produtora(s): DreamWorks SKG, Pacific Data Images (PDI)

9

Simulação de Funcionamento de Máquinas usando modelo Virtual AutoDesk.Projeto trem de pouso

aeronave

Page 10: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Cena confeccionada pelos alunos André e Rafael – 2008

10Software - CCRV

Page 11: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Cena vista de outro ângulo

11

Software - CCRV

Page 12: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Caça F16 2009

12

Page 13: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Caça F16 2009 (Francisco)

13

Page 14: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Introdução aos métodos de Computação Gráfica em

modo 2D.

14

modo 2D.

Page 15: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Primitivas Gráficas – 2D

Chamamos de primitivas gráficas oscomandos e funções que manipulamealteram os elementos gráficos de umaimagem. Tambémentram na definição os

15

imagem. Tambémentram na definição oselementos básicos de gráficos a partir dosquais são construídos outros, maiscomplexos.(HetemAnnibal Jr.,2006).

Page 16: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Pontos

• O ponto é a unidade gráfica fundamental e também pode ser chamada de pixel.

16

Propriedades de um pixel :

- Posição no plano gráfico (x,y)

- Cor

Page 17: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Representação de pixel

• (x,y) preto

(coordenada - x)

(coordenada - y)

17

(coordenada - x)

Para se obter umpixel é necessário informar o par ordenado(x,y), que possibilita as coordenadas de linha e coluna ondeserá pintada a grade do vídeo; de acordo coma resoluçãoespecificada no sistema operacional.

Page 18: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Eixo de coordenadas (800x600) ou (1024x768)

y-Li

nhas

-0

0 – Colunas - x

18

Page 19: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

19

Page 20: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

20

Page 21: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

21

Page 22: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Pintando um pixel na práticausando C#

Para se tratar elementos gráficos podemos usarum objeto denominadoGraphicsque possibilitausar primitivas gráficas.

22

OBJETO Ponto

Linha

Retângulo

Elipse

Arcos

Graphics

PaintEventArgs

Page 23: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Método Paint()

private void Form1_Paint(object sender, PaintEventArgse)

{

// Instruções gráficas

// Chamadas de funções // Chamadas de funções

}

O método Paint(), permite acessar o controlador gráfico do hardware, permitindo Reproduzir, Pontos, Linhas, Retas etc.

23

Page 24: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criando um pontoPara se desenhar umponto usa-se a

propriedade Graphics do objeto(PaintEventArgs).

Exemplo:

24

Exemplo:e.Graphics.DrawLine(<ObjPen>, x, y, x+1, y);

Onde x coordenada da coluna; e y coordenadada linha a função RGBem ObjPen determina acor do pixel que será plotado na tela.

Page 25: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Objeto da Classe Color

Color cor = new Color();

cor = Color.FromArgb(<Alfa>,<R>, <G>, <B>);

Cana Alfa determina a transparência do ponto, os valores RGB indicam as intensidades.

25

Page 26: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Objeto da classe Pen

Define parâmetros da caneta que reproduz os pontos no vídeo.

Pen <Objeto> = new Pen(<cor>,<ExpN>);

<ExpN> - Determina a espessura.

26

Page 27: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Tons monocromáticos0

127

27

255

Faixa de tons de cinza => C, portanto 0 <= C <= 255

0 255

Page 28: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Intensidade – Imagens Monocromáticas

28

Page 29: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Demonstração da Tabela RGB abaixo.RGB(0,0,0)

Color cor = new Color();

29

Color cor = new Color();

cor = Color.FromArgb(<ExpA>,<ExpN1,<ExpN2>,<ExpN3>);

<ExpA> - Determina canal Alfa (Transparência do

ponto).

<ExpN1> - Determina a Intensidade no canal R.

<ExpN2> - Determina a Intensidade no canal G.

<ExpN3> - Determina a Intensidade no canal B.

Page 30: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo da criação de um ponto no vídeo - algoritmo

Pintap(Inteiro : x,y,cor)inicio

cor = Caneta(cor);

30

cor = Caneta(cor);Desenhapixels(x,y,cor);

fim

Page 31: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Linhas Retas

• Para se desenhar uma reta é necessário usarprimitivasgráficas,ondeasprimitiva vema

31

primitivasgráficas,ondeasprimitiva vemaser um conjunto de algoritmos para serealizar elementos gráficos mais complexos.

Page 32: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Conceito Matemático de reta

bmxy +=

1≤m

Onde (m) Coeficiente ângular em relação ao eixo x.

Ângulo entre 0º e 45º com eixo x, o Coeficiente linear b dá o valor do eixo y.

se

32

1≥m

01

01

xx

yym

−−= 11 mxyb −=

Ângulo entre 45º e 90º com eixo x.

Dados dois pontos no planoP1 e P2, pode-se obter m e bda seguinte maneira.

se

(1) (2)

Page 33: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

As formulas (1) e (2) serão base para construir os algoritmos de retas

1y

33

0x 1x

0y

Page 34: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

DDA – Digital Diferencial Analyser(Analisador Diferencial Digital)

Trata-se de umalgoritmo que respeita asequações de coeficiente angular e linearmostrados anteriormente; Porem esse

34

mostrados anteriormente; Porem essealgoritmo torna-se ineficiente emalgunscaso mostrando uma certa descontinuidadenas retas desenhadas.

Page 35: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Algoritmo DDA (codificado)

retaDDA( real : x0, y0, x1, y1)Inicio

dx <- x1 - x0dy <- y1 - y0x <- x0y <- y0s <- 0se (dx > dy) entao

s <- dxsenao

(100,200)

(100,100) (500,100)

Exemplos valores (x0,y0)-(x1,y1)

35

senao s <- dy

fim_sexi <- dx / syi <- dy / s Pintap( x,y, cor)Para x de 0 ate s faca

x <- x + xiy <- y + yi

Pintap( x,y, cor)fim_para

fim

(300,600)

Page 36: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Breseham

Esse algoritmo baseia-se no argumentode que umsegmento de reta, ao ser plotado,deve ser contínuo, os pixels que compõemosegmentodevemservizinhos; Issofarácom

36

segmentodevemservizinhos; Issofarácomque os pontos das retas sejampróximos nãohavendo separação entre os pixels pintados.

Page 37: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

C#, Breseham

Em linguagens modernas esse algoritmojá se encontra implementado e melhorado.Não havendo necessidadede uma nova

37

Não havendo necessidadede uma novaimplementação.

Page 38: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Algoritmo

retaBreseham (inteiro:x0,y0,x1,y1,cor)

Inicio

Cor = Intensidade(Alfa,cor);

38

Cor = Intensidade(Alfa,cor);

Caneta(cor,0);

DesenhaLinha(cor,x0,y0,x1,y1);

fim

Page 39: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Implementação do Segmento de Reta Segmento de Reta

Breseham C#

39

Page 40: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Métodos para segmentos de retas

DrawLine() : Determinar o ponto Inicial e pontoFinal para o traçado de umsegmento de reta.

40

Exemplo :

DrawLine(<Cor>, x0,y0,x1,y1);

Page 41: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo Prático

x0 x1> C, x0 – 1y0 y1 > L, y0 – 1

^

^

Onde C => representa o número de colunas disponíveis na tela.L => representa o número de linhas disponíveis na tela.

41

p1(100,100)

p2(100,200)

L => representa o número de linhas disponíveis na tela.

Page 42: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Espessura de uma linha

Classe: Pen Permite ativar a canetagráfica; determinando a espessura dada porumnúmero inteiro <ExpN>do ponto.

Exemplo:

42

Exemplo:

Pen caneta = newPen(Cor, <ExpN>);

Espessura

Page 43: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Tipos de linhas

43

Page 44: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Estilos da Linha

Tipo Linha

SOLID

DASH

44

DOT

DASHDOT

DASHDOTDOT

NULL

Page 45: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo Prático

float[] flinha = { 5, 2, 15, 4 };

Pen caneta = new Pen(Color.Black, 2);

caneta.DashPattern = flinha;caneta.DashPattern = flinha;

e.Graphics.DrawLine(caneta, 100,100,100,200);

45

Page 46: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo Prático - 2

float[] dash = { 5, 1};

Pen caneta = new Pen(Color.Black, 1);

caneta.DashPattern = dash;caneta.DashPattern = dash;

e.Graphics.DrawLine(caneta, 100,100,100,200);

46

Page 47: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo Prático - 3

float[] dashdot = {5, 2, 1, 2};

Pen caneta = new Pen(Color.Black, 1);

caneta.DashPattern = dashdot;caneta.DashPattern = dashdot;

e.Graphics.DrawLine(caneta, 100,100,100,200);

47

Page 48: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criando um retângulo

Método DrawRectangle() : Cria um retângulo com a indicação do ponto e as dimensões.

Exemplo :

48

DrawRectangle(Pen, <ExpN1>,<ExpN2>,<ExpN3>,<ExpN4>);

<ExpN1>: Corresponde a Coluna da janela.

<ExpN2>: Corresponde a Linha da janela.

<ExpN3>: Corresponde a Largura da janela.

<ExpN4>: Corresponde a Altura da janela.

Page 49: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo Prático

Color cor = new Color();

cor = Color.FromArgb(0, 0, 255);

e.Graphics.DrawRectangle(new Pen(cor,0), 100,50,100,50);e.Graphics.DrawRectangle(new Pen(cor,0), 100,50,100,50);

49

Page 50: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Círculos e Elipses

50

Círculos e Elipses

Page 51: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Círculos

Traçado de um círculos:

Um circulo vem a ser um conjunto de pontos que estão a umamesma distância de um ponto; essa distância é também chamadaderaio. E o ponto distante de todos os outros é o centro.

Obtemos a seguinte

51

Centro( ) ( ) 222 ryyxx cc =−+−

Obtemos a seguinte definição.

Essa definição não tem como ser usada em computação gráfica.

Page 52: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Definição válida para a computação gráfica.

y =f(x) ou x = g(y), Isolando-se as variáveis teremos

−−±= 22 )( cc yyrxx g(y)

52

−−±= 22 )( cc

cc

xxryy f(x)

Essa definição quando um segmento de círculo fica quase horizontal ou vertical um incremento e x ou y tornará o arco descontinuo.

Page 53: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Para podermos criar umalgoritmo quedesenhe o seguimento circular devemos converte asexpressões anteriores emcoordenadas polares. Comofunção de raio e de umângulo.

+= θcosrxx

Funções trigonométricas:

53

+=+=

θθ

sen

cos

ryy

rxx

c

c

θ π20aÉ um ângulo que varia entre

Page 54: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Precisão dependente do raio do círculo

Octante Xn Yn

1 x y

2 y x

3 y -x1

23

4

4/0 πθ até−

54

3 y -x

4 -x y

5 -x -y

6 -y -x

7 -y x

8 x -y

14

5

6 7

8

Page 55: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Algoritmo do segmento de arcos e círculos usando funções trigonométricas sentido horário.

dArc(Inteiro:Xc,Yc, raio,Ti,Tf, cor)Inicio

moverAte(Xc,Yc)para teta de Ti ate Tf faca

x <- Xc + raio * cos(teta)y <- Yc + raio * sin(teta)

Xc, Yc – Centro Arco

Raio – Distância do centro nos pontos que formam o arco

Ti, Tf – valores iniciais e

55

y <- Yc + raio * sin(teta)Pintap(x,y,cor)

fim_parafim

θ

Ti, Tf – valores iniciais e finais de

Cor : poderá ser três variáveis inteiras para receber valores RGB.

Para forma um circulo deverá estar entre 0 e 2

θ

π

Page 56: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

ObservaçãoAs Variáveis Ti e Tf, serão iniciadas com valores em graus que

deverão ser transformada em radiano no momento de suaimplementação; que será equivalente a teta.

π

56

º180

παθ =

Page 57: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

O algoritmo apresentado anteriormenteconhecido como funções polares; iráapresentar falha de precisão quando seaumentar o raio podemtornar imprecisõesno traçado do circulo ou arco; Pararesolveresseproblemaexisteum algoritmo

57

no traçado do circulo ou arco; Pararesolveresseproblemaexisteum algoritmoconhecido como ponto médio para círculos.Esse algoritmo já se encontraimplementado emC#.

Page 58: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

ElipsesTraçado de uma Elipse:

Uma elipse é definida como um conjunto de pontos cuja soma dasdistâncias para dois pontos fixos é constantes. Onde os doispontos fixossão chamados de foco da elipse. Sua definição matemática é:

22

22

21

2121 )()()()( yyxxyyxxdd −+−+−+−=+

58

),(),( 2211 yxeyx21eddOnde São as posições dos focos,

São as do ponto P distância até os focos.p=(x,y)

1d 2dEssa definição nãotem como ser usadaem computaçãográfica.

Page 59: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Para se obter um algoritmo que satisfaça as definições em computação gráfica.

Se faz necessário uma definiçãof(x) e g(y).Coordenada polar

+= θcosxc ryy

59

+=+=

θθ

sen

cos

yc

xc

rxx

ryy

rx e ry referem-se aos raios da elipse na direção x e y, (xc, yc) é o centro da elipse. é um ângulo que vária entre 0 e 2θ πO número de passos deverá aumentar com o raio.

Page 60: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Quadrante de simetria numa elipse

Quadrante Xn Yn

1 x y

2 -x y12

60

3 -x -y

4 x -y

43

Page 61: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Algoritmo do segmento de arcos para confecção da elipse usando funções trigonométricas sentido horário.

dElipse(Inteiro:Xc,Yc, Rx,Ry,Ti,Tf, cor)Inicio

moverAte(Xc,Yc)para teta de Ti ate Tf faca

x <- Xc + Ry * cos(teta)y <- Yc + Rx * sin(teta)

Xc, Yc – Centro Arco

Rx, Ry – Raio da elipse na direção x e y. Rx < Ry

Ti, Tf – valores iniciais e finais de θ

61

y <- Yc + Rx * sin(teta)Pintap(x,y,cor)

fim_parafim

θ

finais de

Cor : poderá ser três variáveis inteiras para receber valores RGB.

Para forma um circulo deverá estar entre 0 e 2

θ

π

Page 62: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

O algoritmo apresentado anteriormenteconhecido como funções polares; iráapresentar falha de precisão quando seaumentar o raio podemtornar imprecisões notraçadodo circulo ou arco; Para resolveresseproblemaexisteumalgoritmoconhecidocomo

62

traçadodo circulo ou arco; Para resolveresseproblemaexisteumalgoritmoconhecidocomoponto médio para Elipse.Esse algoritmo já se encontra implementadoemC#.

Page 63: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Ponto Médio para Elipse

Método : Ellipse() desenha uma elipsenas coordenadas especificadas.

Exemplo:

63

Exemplo:

e.Graphics.DrawEllipse(Xc,Yc, Lx, Ay);

Lx = Largura da região rectangular

Ay = Altura da região retangular

Page 64: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Aplicação de método para desenho de uma Ellipse

Exemplo:

Color cor = new Color();Color cor = new Color();

cor = Color.FromArgb(255, 0, 0);

e.Graphics.DrawEllipse(new Pen(cor, 0), 100, 100, 200, 100);

64

Page 65: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Conceito de Preenchimento de Preenchimento de

Áreas

65

Page 66: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Preenchimento de áreas (Sólidas)

Ao se desenhar umobjeto alémde seu contorno omesmo poderá possuir cores emseu interior podendo servisualizadas. Em C# encontramosimplementadosesse

66

visualizadas. Em C# encontramosimplementadosessealgoritmos o que normalmente se usa é o preenchimentorecursivo.

Page 67: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Propriedade Brush, Color

Permite realizar o preenchimento emumdeterminado objeto retângulo, círculo etc.

Exemplo :

67

SolidBrush fundo = new SolidBrush(Color.Blue);

Pen pen = new Pen(Color.Black, 0);

e.Graphics.DrawEllipse(pen, 100, 100, 200, 100);

e.Graphics.FillEllipse (fundo, 100, 100, 200, 100);

Page 68: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Preenchimento com HachuraHachura

68

Page 69: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Preenchimento Hachura (HatchBrush)

Para se confeccionar o modelo dehachura, usa-se umobjeto da classeHatchBrush.

Sinatxe:

69

Sinatxe:

HatchBrush preech = new HatchBrush(<TipoH>, <CorL>,

<CorF>);

<TipoH>: Tipo de Hachura a ser aplicado.

<CorL> : Cor das linhas da Hachura.

<CorF> : Cor de preenchimento sólido de fundo.

Page 70: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Tabela da propriedade : Hachuras

(*)

70

Obs: São preenchimentos válidos apenas para o objetoMétodos disponíveis no controlador Gráfico.

Page 71: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Observação

Para que a classe HatchBrush, funcionecorretamente é necessário, acrescentar opacote.

using System.Drawing.Drawing2D;

No cabeçalho do programa.

71

Page 72: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo prático de Aplicação da Hachura

HatchBrush hashura = new HatchBrush(

HatchStyle.Vertical, //

DarkDownwardDiagonal,DarkDownwardDiagonal,

Color.Red,

Color.FromArgb(255, 128, 255, 255));

e.Graphics.FillEllipse(hashura, 0, 0, 100, 60);72

Page 73: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Aplicação de Imagens como Texturacomo Textura

73

Page 74: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Usando Textura

Podemos preencher uma figura usando umarquivo comuma imagemou desenho.

Para realizar essa técnica usa-se umobjetoda classe Bitmap, encapsulado a classeTextureBrush.

74

TextureBrush.

Exemplo :

Bitmap <ObjBitmap> = new Bitmap(<Caminho>);

Page 75: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criação do Objeto da Classe TextureBrush

Permite encapsulamento do objeto contendo aimagemque tomará a forma geométrica da figuradesenhada.

75

desenhada.

Exemplo :

Bitmap bitmap = new Bitmap("Textura.jpg");

TextureBrush tBrush = new TextureBrush(bitmap);

Page 76: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo :

Bitmap bitmap = new Bitmap("Textura.jpg");

TextureBrush tBrush = new TextureBrush(bitmap);

e.Graphics.FillEllipse(tBrush, 100, 20, 200, 100);

76

Page 77: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Desenhando Graficamente um texto

WwySsig} Subida} Descida} Altura

77

WwySsig } Descida

Linha de base

}

Tamanho da fonte

Page 78: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criação de textos

DrawString(): Permite desenhas umtextonas coordenadas especificadas.

Sintaxe:DrawString(<Texto>,<oFont>,<oCor>,x,y);

78

DrawString(<Texto>,<oFont>,<oCor>,x,y);

<Texto>: String a ser impressa.

<oFont>: Objeto comformato da fonte do texto.

<oCor>: Objeto coma cor das letras.

x e y: Coordenadas de coluna e linha referentes aposição do texto.

Page 79: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Font(): determina o tipo de fonte para as letras gráficas.

Sintaxe:

Font oFont = new Font(<ExpS>,<ExpN>,<oStyle>);

<ExpS>: Tipo da fonte a ser atribuída a um objeto.

<ExpN>: Tamanho da fonte a ser atribuída.

<oStyle>: Estilo da fonte.

79

Page 80: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Tabela de estilo de fonte (FontStyle)

Estilo Descrição

Bold Negrito

Italic Itálico

80

Italic Itálico

Regular Formato tradicional

StrikeOut Atachado

Underline Sublinhado

Page 81: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo DrawString, Font

String str = "Bom Dia";

Font font = new Font("Arial", 16, FontStyle.Bold );

SolidBrush corletra = new SolidBrush(Color.Black);

float x = 150.0F;

float y = 150.0F;

e.Graphics.DrawString(str, font, corletra, x,y);

81

Page 82: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Transformações Geométricas – 2D

Chamamos de transformaçãoo atode levar umobjeto de umponto paraoutro, numsistemade referências. Astransformaçõesmaisusadassão:

82

transformaçõesmaisusadassão:

• Translação• Rotação • Escala.

Page 83: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Translação Chamamos de translação o ato de levar um

objeto de umponto para outro, numsistema dereferência. Dado umponto original (x,y) ; existe umponto (x’,y’) translação, que corresponde ao pontooriginal dado por:

(tx, ty) – É chamado de

vetor de translaçãoou vetor

83

x’=x+t x

y’=y+t y

vetor de translaçãoou vetorde deslocamentotx quantospixels a figura estádeslocada na horizontal ety

quantos pixels a figura estadeslocada na vertical.

Page 84: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Aplicação de uma translação

y0+ty

y1+ty

84

x0 x1

y1+ty

y1’

y0’

Translação

Page 85: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Conceito de desenho do retângulo

Pen Pen = new Pen(cor, 0);

e.Graphics.DrawRectangle(Pen, x1,y1,x2,y2);

<x1> - Coluna da janela.

<x2> - linha da janela.

<x2> - Largura da figura.

<y2> - Altura da figura.

85

Page 86: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Implementação de uma translação

int x0 = 10; int y0 = 10;

int x1 = 100; int y1 =50;

86

ty = 70;

Retangulo(x0,y0,x1,y1 );

Retangulo(x0,y0+ty,x1,y1+ty );

Vetor de translação horizontal

Page 87: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Problema Proposto

Implementar uma função para desenhar umretângulo e emseguida usando conceito deprimitiva implementar uma função paraprimitiva implementar uma função paradesenhar umquadrado.

87

Page 88: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Rotação

Dá-se o nome de rotação ao ato de girar umobjeto de umângulo, numsistema de referência.

−= θθ sencos' yxx

88

−=−=

θθθθ

cossen'

sencos'

yxy

yxx

Page 89: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo de Aplicação de Rotação em torno de um eixo.

(100,200)

x’=xc + r * cos(180+teta)

y’=yc + r * sen(180+teta)

Para ajuste no primeiroquadrante os valoresdevem ser negativos.

89

Origem (xc,yc)

(100,200)

teta = 90 graus

r(x’,y’)

Page 90: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Implementação em C# de Rotação em torno de um eixo de referência

Font font = new Font("Arial", 16, FontStyle.Bold);

SolidBrush corletra = new SolidBrush(Color.Black);

float x = 150.0F;

float y = 150.0F;

90

int raio = 50;

e.Graphics.DrawString(".", font, corletra, x, y);

int x1 = (int)(100 + raio * Math.Sin(180 * 3.14 / 180));

int y1 = (int)(200 + raio * Math.Cos(180 * 3.14 / 180));

SolidBrush corletra1 = new SolidBrush(Color.Red);

e.Graphics.DrawString(".", font, corletra1, x1, y1);

Page 91: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Escala

Quando se aplica uma transformação deescala a umobjeto, o resultado é umnovoobjeto semelhante ao original, mas“esticado” ou “encolhido”. Pode-se aplicar

91

“esticado” ou “encolhido”. Pode-se aplicarescala comvalores diferentes para cadadimensão; por exemplo, dobrar umobjetona direção horizontal e dividir na vertical.

Page 92: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Formalização da Escala

Uma escala é determinada pelo vetor de escala (Sx ,Sy). Onde Sx é a escala aplicada na direção x, e Sy é a escala aplicada na direção y.

Equação :

{

92

Equação : x’= xsx

y’= ysy{

Page 93: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Implementação de escala em uma figura.

int x0=100; int y0=200;int x1=300; int y1=250;int sx=2; int sy=2;

Color cor = new Color();Color cor = new Color();

cor = Color.FromArgb(0, 0, 255);

retangulo(e,x0,y0,x1,y1,cor);

MessageBox.Show("ok");

retangulo(e,x0,y0,x1*sx,y1*sy,cor);

93

Page 94: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Aplicando Escala

y0

y1 * Sy

94

x0 x1 * Sx

y’

x’

Page 95: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Introdução : Processando Imagens Bitmap

• Processamento de imagemé qualquerforma deprocessamento de dadosno qual aentrada e saída são imagens tais como

95

entrada e saída são imagens tais comofotografias ou quadros de vídeo.

Page 96: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Formação da Imagem

96

Page 97: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

97

Page 98: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

98

Page 99: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

99

Page 100: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Processamento computacional envolvendo imagens

Processar Imagem

100

Processamento

de

Imagens

Processamento de Imagens – Estuda as transformações de imagens, que pode ser de uma imagem em outra ou a estimação de

parâmetros da imagem.

Page 101: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Computação Gráfica (CG)

Processamento

em CG

Cone de raio 1

altura 1, pós observador, pós

iluminação, fundo,

101

em CGiluminação, fundo, etc.

Estuda os métodos de se criar imagens sintéticas a partir de especificações.

Page 102: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Tipo Bitmap

• Device Independent Bitmap (DIB) ouWindows Bitmap (BMP) é umformato degráficos por mapa de bits (compostopor

102

gráficos por mapa de bits (compostoporpixeis) usado pelos gráficos de subsistema(GDI) do Microsoft Windows, e é usadageralmente como umformato de gráficosnessa plataforma.

GDI - Graphics Device Interface

Page 103: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Importante:

• Um arquivo do tipo BMPé mais seguroparasermanipuladopor nãoter compressão

103

parasermanipuladopor nãoter compressãode informações emseu formato causando aperda de qualidade na imagemou figura.

Page 104: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Abrindo um arquivo de imagem.

• Primeiro o objeto da classe Image deve ser instanciado.

104

pictureBox1.Load(“Imagem.bmp”);

Page 105: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Fazendo leitura da Imagem

• Uma das técnica mais simples para realizar aleitura de uma imagemé chamada de varredurahorizontal. Onde pega-se o tamanho da áreaocupadapela imagem e realiza-se a leitura dos

105

ocupadapela imagem e realiza-se a leitura dospixels até o final de cada linha fazendo isso até ofinal da imagem.

Page 106: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo : Varredura Horizontal

Largura (width)

βα

≤+≤+

1

1

y

x)(

)(arg

linhasAltura

colunasuraL

==

βα

106

Altura

(height)

(Xn+1,Yn+1)

Page 107: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Capturando o tamanho da imagemWidth e Height

// Cria um ponteiro do tipo Imagem.// Aponta para o endereço da imagemBitmap img = new Bitmap("C: \\trabalhos\\vermelho.jpg");

107

Bitmap img = new Bitmap("C: \\trabalhos\\vermelho.jpg");// Captura o tamanho da imagemint largura = img.Width;int altura = img.Height;

Page 108: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Método Descrição

GetPixel(i, j).R Retorna intensidade de cor vermelha.

GetPixel(i, j).G Retorna intensidade de cor verde.

GetPixel(i, j).B Retorna intensidade de cor azul.

108

Exemplo :

byte r,g,b;r = img.GetPixel(i,j).R;g = img.GetPixel(i,j).G;b = img.GetPixel(i,j).B;

Page 109: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Criando a varredura por arranjos simples.

).( βα=S

S, área retangular da imagem.

A, são arranjos simples de S elementos tomados 2 a 2.(par ordenado)

},{ 1+= nnn yxZSeja: Z

109

imagem.

S

x

y

Page 110: ICG(I-Bim)-NV [Modo de Compatibilidade] - univap.brI-Bim)-NV.pdf · ... Coeficiente ângular em relação ao eixo x. Ângulo entre 0º e ... L => representa o número de linhas

Exemplo : (Troca a imagem de cor)Bitmap img = new Bitmap("C:\\trabalhos\\aulas\\ICGNOVO-2018\\im1.jpg");

int coluna = img.Width;

int linha = img.Height;

Bitmap imgnova = new Bitmap(coluna, linha);

Color cor = new Color();

for (int i = 0; i <= coluna-1; i++)

{

for (int j = 0; j <= linha-1; j++)

{

int r = img.GetPixel(i, j).R;int r = img.GetPixel(i, j).R;

int g = img.GetPixel(i, j).G;

int b = img.GetPixel(i, j).B;

if (r == 255 && g == 0 && b == 0)

cor = Color.FromArgb(255, 0, 255, 0);

else

cor = Color.FromArgb(255, r, g, b);

imgnova.SetPixel(i, j, cor);

}

}

imgnova.Save("C:\\trabalhos\\aulas\\ICGNOVO-2018\\novaImagem.jpg"); 110