scorch Posted December 16, 2009 at 08:30 PM Report Share #300843 Posted December 16, 2009 at 08:30 PM Boas, estou a desenvolver uma aplicação, a primeira com que trabalho com GDI+. Ora, tenho uma PictureBox que tem uma imagem predefinida, neste caso, o tabuleiro para um jogo. Depois, eu quero desenhar certos elementos por cima da PictureBox. Tenho este código: Dim B As New Bitmap(Me.img_tabuleiro.Width, Me.img_tabuleiro.Height) Dim G As Graphics = Graphics.FromImage(B) G.SmoothingMode = Drawing2D.SmoothingMode.HighQuality G.FillEllipse(Brushes.Black, 20, 20, 20, 20) Já tentei também: Me.img_tabuleiro.Image = B Mas, como é óbvio, ele altera-me a imagem toda e coloca-me só o Elipse, e o que estava lá no inicio desaparece. Alguém sabe como posso fazer para colocar isto a funcionar? 🙂 Cumps, Scorch PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 08:43 PM Report Share #300852 Posted December 16, 2009 at 08:43 PM A tal imagem do tabuleiro tem de ser "externa". Não a podes reaproveitar porque levaria sempre o resto atrás. Imagina por exemplo que tens a imagem nos teus recursos, sobre o nome "Tabuleiro": Dim B As New Bitmap(PictureBox1.Width, PictureBox1.Height) Dim G As Graphics = Graphics.FromImage(B) 'primeiro o tabuleiro G.DrawImage(My.Resources.Tabuleiro, 0, 0) 'depois o resto G.DrawEllipse(Pens.Black, 0, 0, 5, 5) 'e por fim, dás-lhe a composição PictureBox1.Image = B Podes alternativamente, desenhar directamente da picturebox: Dim G as Graphics = PictureBox1.CreateGraphics É solução sapateira mas dá para entenderes e dares a volta. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 16, 2009 at 08:51 PM Author Report Share #300856 Posted December 16, 2009 at 08:51 PM Se eu fizer como tu dissestes, a imagem fica-me minúscula. 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 09:16 PM Report Share #300873 Posted December 16, 2009 at 09:16 PM Dei-te uma elipse de 2,5 de raio como exemplo. Explica lá melhor o que queres fazer e vamos chegar a uma solução mais específica. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 16, 2009 at 09:20 PM Author Report Share #300876 Posted December 16, 2009 at 09:20 PM O tabuleiro tem vários quadrados. É tipo um tabuleiro de damas. Eu preciso de desenhar círculos conforme as posições das peças. Mas a imagem que me fica pequena é a do background, a original. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 09:26 PM Report Share #300882 Posted December 16, 2009 at 09:26 PM Isso é estranho porque estás a "desenhar" sobre um bitmap com as dimensões da picturebox, e o drawimage só pede um ponto para o canto superior esquerdo, desenhando o resto da imagem crua, de qualquer maneira. Tenta o seguinte: Não uses picturebox, só por motivos de rastreio. Eu costumo usar Panels e os seus BackGroundImage para esse tipo de coisas. Mais porque normalmente interessa-me ter controlos por cima. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 16, 2009 at 09:36 PM Author Report Share #300894 Posted December 16, 2009 at 09:36 PM Tentei e nada. Aqui fica um screenshot. O da esquerda é a PictureBox sem GDI+, o da direita é o do Panel com GDI+. http://img402.imageshack.us/img402/5426/gdi.png PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 09:41 PM Report Share #300900 Posted December 16, 2009 at 09:41 PM Isso está me a fazer "frenicoques". 😛 Mostra lá o código todo. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 16, 2009 at 09:43 PM Author Report Share #300901 Posted December 16, 2009 at 09:43 PM É só isto. 🙂 Imports System.Drawing Imports System.Drawing.Drawing2D Public Class frm_init Private Sub frm_init_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim B As New Bitmap(Me.img_tabuleiro.Image.Width, Me.img_tabuleiro.Image.Height) Dim G As Graphics = Graphics.FromImage(B) G.SmoothingMode = Drawing2D.SmoothingMode.HighQuality G.DrawImage(My.Resources.Rrastros_Tabuleiro2, 0, 0) G.FillEllipse(Brushes.Black, 30, 20, 20, 20) Me.Panel1.BackgroundImage = B End Sub End Class PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 09:49 PM Report Share #300905 Posted December 16, 2009 at 09:49 PM Imports System.Drawing Imports System.Drawing.Drawing2D Public Class frm_init Private Sub frm_init_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim B As New Bitmap(Me.img_tabuleiro.Image.Width, Me.img_tabuleiro.Image.Height) Dim G As Graphics = Graphics.FromImage(B) G.SmoothingMode = Drawing2D.SmoothingMode.HighQuality G.DrawImage(My.Resources.Rrastros_Tabuleiro2, 0, 0) G.FillEllipse(Brushes.Black, 30, 20, 20, 20) Me.Panel1.BackgroundImage = B End Sub End Class Procura saber, em debug, que valores estão a entrar para dar o tamanho ao bitmap. O problema só pode residir aí (ou assim me parece) Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 16, 2009 at 09:57 PM Author Report Share #300911 Posted December 16, 2009 at 09:57 PM Dá-me: 180 180 As medidas estão correctas, é mesmo 180. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 16, 2009 at 10:07 PM Report Share #300914 Posted December 16, 2009 at 10:07 PM Alguma coisa me está a escapar no teu código. Exprimenta trocar o BackGroundImageLayout (ou coisa assim parecida) para outro. Se estiver zoom, ou stretch, e o tamanho for outro, ele vai adaptar a imagem. Toma um projecto que está a funcionar perfeitamente, acabei de o fazer, para tentares perceber o que raio está a acontecer aí. (o teu também deveria, à primeira vista... dado que os valores entram correctos) Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 17, 2009 at 09:14 PM Author Report Share #301179 Posted December 17, 2009 at 09:14 PM Hoje de manhã descobri o problema, embora não possa ter vindo ao fórum. Basta fazer isto: G.DrawImage(My.Resources.Rrastros_Tabuleiro2, 0, 0, 180, 180) Assim já funciona. B) Obrigado pela ajuda. PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
ribeiro55 Posted December 18, 2009 at 12:34 AM Report Share #301207 Posted December 18, 2009 at 12:34 AM Que coisa manhosa. Penso que nunca me aconteceu mandar desenhar um bitmap e ele sair com outras dimensões que não fossem as originais, quando não usava o overload com a largura e altura. Mas tu já deves é ter a maquina engatada 😛 Lembras-te do QAT eXplorer? Vieste a descobrir que era por causa de fontes ? OS queimadinho... 😛 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
scorch Posted December 18, 2009 at 12:32 PM Author Report Share #301249 Posted December 18, 2009 at 12:32 PM É novo. 😛 PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now