Cybernavigator Posted November 9, 2007 at 05:14 PM Report Share #146351 Posted November 9, 2007 at 05:14 PM Bom, o k eu não consigo fazer quando sobreponho uma imagem eh k a box de cima fique transparente de forma a deixar ver parte da imagem de baixo... Imaginem um gif ou um png, tem uma parte transparente, mas quando o meto no vb dentro de uma picbox essa parte n fica transparente, fica com a cor do fundo da picbox... Any ideas? Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 9, 2007 at 08:49 PM Report Share #146395 Posted November 9, 2007 at 08:49 PM Boas.... tenta ver se dá com a API BitBlt, ou então vê esta thread, com esse código dá para fazeres isso que queres mas com Forms, pode ser que alterado dê para fazeres mesmo o que queres. Cumps Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 9, 2007 at 08:51 PM Author Report Share #146397 Posted November 9, 2007 at 08:51 PM NuGuN como assim API Bitblt? Olha, se fôr mais claro repara. Http://buahaha.no.sapo.pt/stress1.PNG <- esta está com o background a transparente E para provar k a imagem não tem fundo aki fica a segunda print Http://buahaha.no.sapo.pt/stress2.PNG Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 9, 2007 at 09:12 PM Report Share #146401 Posted November 9, 2007 at 09:12 PM hhhmmm, já estou com uma melhor percepção do que queres fazer. Estou certo que utilizando dias API's - Bitblt e StretchBlt. Ou quem sabe, se não dá apenas só com a Bitblt A StretchBlt serve para copiares uma imagem completa ou apenas parte dela e colocares junto a outa imagem, e com bitblt tentas jogar com o parametro dwRop. No google encontras muitos exemplos de como trabalhar com essas duas API's. Caso não consiguas, disponibiliza essas duas imagens e eu posso tentar em VB6, e tu depois só tens de alterar, mas como se está apenas a trabalhar com API's não vais ter de alterar grande coisa. Cumps Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 9, 2007 at 10:02 PM Author Report Share #146416 Posted November 9, 2007 at 10:02 PM Desculpa a minha ignorância mas não estou mesmo a conseguir... A cena é k eu quero "juntar" ou sobrepôr uma imagem a uma k faz download automáticamente de um site... De qualquer maneira se conseguires fazer alguma coisa juntando as imagens k deixei em anexo ás imagens Unknown1 e Unknown2 (também anexadas) era fixe Já agora deixo também aki um ficheiro k me mandaram de outro fórum pra me tentarem ajudar, mas mais uma vez não tou a conseguir fazer nada com ele. Tou no ínicio de programar e acho k prestes a desistir Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 10, 2007 at 10:50 AM Report Share #146484 Posted November 10, 2007 at 10:50 AM Boas... Bem penso que é isto que queres, o código fonte fica aqui e deixo um executável em anexo para veres como funciona pois é em VB6 e não é VB.NET Option Explicit Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _ ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Sub Command1_Click() BitBlt Picture1.hDC, 70, 0, ScaleX(Picture2.ScaleWidth, vbTwips, vbPixels), _ ScaleY(Picture2.ScaleHeight, vbTwips, vbPixels), Picture2.hDC, 0, 0, vbSrcAnd Picture1.Refresh End Sub Cumps Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 10, 2007 at 11:34 AM Author Report Share #146492 Posted November 10, 2007 at 11:34 AM Bem, é isso mesmo, agora a duvida eh fazer isso em .net :| esse .hDC é o k? Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 10, 2007 at 11:47 AM Report Share #146496 Posted November 10, 2007 at 11:47 AM Hdc = Handle of Device Context É tipo um ID da picturebox ou do que for... Tens aqui o que precisas para alterares isso 😛 Cumps Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 10, 2007 at 12:12 PM Author Report Share #146506 Posted November 10, 2007 at 12:12 PM lol, opah, não percebo, usei essa ultima source k me deste, faço copiar colar, mas cola com o fundo na mesma 😛 Vou comprar tabaco kisto vai ser um dia longo :smoke: Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 10, 2007 at 12:24 PM Report Share #146510 Posted November 10, 2007 at 12:24 PM ? Com essa é que me estas a deixar confuso..... copias-te e colas-te este código: Option Explicit Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, _ ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, _ ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long Private Sub Command1_Click() BitBlt Picture1.hDC, 70, 0, ScaleX(Picture2.ScaleWidth, vbTwips, vbPixels), _ ScaleY(Picture2.ScaleHeight, vbTwips, vbPixels), Picture2.hDC, 0, 0, vbSrcAnd Picture1.Refresh End Sub E isso funcionar no compilador de VB.NET? Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 10, 2007 at 12:42 PM Author Report Share #146516 Posted November 10, 2007 at 12:42 PM 😛 Vou por partes, talvez descubras o erro ? Meti isto num módulo (Bitblt.vb) Public Class BitBliter #Region " BitBlt Declaration" Private Declare Auto Function BitBlt Lib "GDI32.DLL" ( _ ByVal hdcDest As IntPtr, _ ByVal nXDest As Integer, _ ByVal nYDest As Integer, _ ByVal nWidth As Integer, _ ByVal nHeight As Integer, _ ByVal hdcSrc As IntPtr, _ ByVal nXSrc As Integer, _ ByVal nYSrc As Integer, _ ByVal dwRop As Int32) As Boolean #End Region #Region " Members " ' Public Holders Private MemGrp As Graphics Private MemHdc As IntPtr Private LastSize As Size Private Copied As Boolean #End Region #Region " Interface " 'Interface Public Sub Copy(ByVal srcGraphics As Graphics, ByVal Size As Size) LastSize = Size ' Saving so we'l know how to Paste ' check if already copied If Copied Then DisposeObjects() ' so old objects are disposed ' Creating a temporary Bitmap to create objects of Dim srcBmp As New Bitmap(Size.Width, Size.Height, srcGraphics) ' Creating Objects MemGrp = Graphics.FromImage(srcBmp) 'Create a Graphics object MemHdc = MemGrp.GetHdc 'Get the Device Context '>>> get the picture <<< MyBitBlt(srcGraphics, MemHdc, Size.Width, Size.Height) ' Dispose of the BMP srcBmp.Dispose() Copied = True End Sub Public Sub Paste(ByVal TargetGraphics As Graphics, ByVal X As Integer, ByVal Y As Integer) Dim TargetHdc As IntPtr = TargetGraphics.GetHdc MyBitBlt(MemHdc, TargetHdc, LastSize.Width, LastSize.Height, X, Y) TargetGraphics.ReleaseHdc(TargetHdc) End Sub #End Region #Region " Internals " Const SRCCOPY As Integer = &HCC0020 ' Wraping things up Private Sub MyBitBlt(ByVal SourceGraphics As Graphics, ByVal TargetHDC As IntPtr, ByVal width As Integer, ByVal Height As Integer) ' Creating a DeviceContext to capture from Dim SourceHDC As IntPtr = SourceGraphics.GetHdc ' Blitting (Copying) the data BitBlt(TargetHDC, 0, 0, width, Height, SourceHDC, 0, 0, SRCCOPY) ' Releasing the Device context used SourceGraphics.ReleaseHdc(SourceHDC) End Sub Private Sub MyBitBlt(ByVal SourceHDC As IntPtr, ByVal TargetHDC As IntPtr, ByVal width As Integer, ByVal Height As Integer, ByVal PosX As Integer, ByVal PosY As Integer) ' Copying data to a specific position on the target Device Context BitBlt(TargetHDC, PosX, PosY, width, Height, SourceHDC, 0, 0, SRCCOPY) End Sub ' Cleanning Up ' Before Destroying this class, dispose of objects to reclaim memory Protected Overrides Sub Finalize() DisposeObjects() MyBase.Finalize() End Sub ' Disposing of objects Private Sub DisposeObjects() MemGrp.ReleaseHdc(MemHdc) ' Release Device Context MemGrp.Dispose() ' Disposing of Graphics object End Sub #End Region End Class Depois meti dois butões, um k vai buscar a imagem ok1 e copia para a imagem userpict1: O butão 2 copia e o 1 cola. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' We create a Graphics object to paste to Dim targetGrp As Graphics = userpict1.CreateGraphics ' BitBlt it away MyBitbliter.Paste(targetGrp, 0, 0) ' And don't forget to dispose of the object targetGrp.Dispose() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ' We create a Graphics object to work with Dim SourceGrp As Graphics = ok1.CreateGraphics ' Copy the surface MyBitbliter.Copy(SourceGrp, New Size(ok1.Width, ok1.Height)) ' Dispose of the Graphics object SourceGrp.Dispose() End Sub Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
NuGuN Posted November 10, 2007 at 02:59 PM Report Share #146559 Posted November 10, 2007 at 02:59 PM Editei o teu post, não foi por estar nada mal foi apenas para afastar os procedimentos uns dos outros para os ver melhor. Bem, primeiro não precisas de andar a copiar e a colar, com o código que aí tens basta o código do past (parece-me a mim), e depois se reparares no código que postei em VB6 o ultimo parâmetro que estou a utilizar na API não é o vbsrccopy mas sim vbsrcand. Eu disse que tinhas tudo o que precisavas naquele link mas tens de alterar algumas coisas. O valor de vbsrcand é 8913094 por isso em vez de teres -> Const SRCCOPY As Integer = &HCC0020 metes -> Const VBSrcAnd As Integer = 8913094 E como é óbvio trocas no código SRCCOPY por vbSrcAnd.... E penso que é só. Cumps Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 10, 2007 at 09:22 PM Author Report Share #146645 Posted November 10, 2007 at 09:22 PM Ok, mais logo testo isso e digo aqui quais foram os resultados... Desde já muito obrigado. 😛 Já agora outra coisa, usando o código acima (foi convertido de vb.net 2k3 para vb.net 2k5) quando fecho a form aparece-me um erro aqui ' Disposing of objects Private Sub DisposeObjects() MemGrp.ReleaseHdc(MemHdc) ' Release Device Context MemGrp.Dispose() ' Disposing of Graphics object End Sub Alguém em sabe dizer porque? *editado* NuGuN, trocar akilo que disses-te só originou a cópia de um quadrado preto :\ Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** Link to comment Share on other sites More sharing options...
Cybernavigator Posted November 11, 2007 at 01:43 AM Author Report Share #146676 Posted November 11, 2007 at 01:43 AM mais um topico resolvido. obrigado nugun. deu-me muitas luzes. como habitual amanha deixo aki um exemplo d como resolvi 😛 Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico*** 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