průhlednost png   zodpovězená otázka

VB.NET

Zdravím...

Tak už jsem narazil na další problém, mám na formu umístěno pár obrázků (PNG), mají některé části průhledné -> což je fajn jen do té doby, než se dostane ta průhledná část nad jiný obrázek (PNG)! To průhledné se v tu chvíly stane neprůhledné a klidně mi to co je pod ním schová!!!! Co s tím?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Opravdu máte obrázky na formuláři, tj. jako Image vykreslené v Paint formuláře?

Pokud jsou obrázky v PictureBox, pak průhlednost jde až na pozadí formuláře. Budete-li obrázky načítat do proměnné typu Image a vykreslovat v Form1_Paint

 e.Graphics.DrawImage(obr, x, y)
 ' kde obr je typu Image a x, y Integer jako souřadnice jeho umístění

pak se obrázky zakrývat nebudou - nahoře bude neprůhledná část naposled vykresleného obrázku...

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

obrázky mám v pictureBoxech, protože je při jistých okolnostech potřebuji vyměnit za jiné... Vaše rešení vyzkouším. Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vyměňovat obrázky za jiné není problém. Jen po změně musíte vyvolat překreslení formuláře s Me.Invalidate()

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

jak mám Form.Paintu třeba z procedury(nebo funkce) poslat, že chci vykreslit jiný obrázek?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Právě s tím Inalidate(). Třeba po kliknutí na Button změníte obsah Image, souřadnice ap., prodeduru zakončíte Me.Invalidate() a tím zavoláte Paint formuláře.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

no nějak se mi to nedaří...kde vezmu ten Image?? Picturebox1.Image?? Kopněte mě správným směrem, trochu v tom tápu...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Napsal jsem zkráceně: "změníte obsah Image" - pardon, mělo být doslova: "změníte obsah proměnné typu Image". To máte výše v té malé ukázce kódu, kde jsem nadefinoval proměnnou obr...

Zkuste - na formuláři je jeden Button, kterým se budou opakovaným klikem měnit polohy obrázků s částečným překrytím

Imports System.Drawing

Public Class Form1
  Dim obr(2) As Image
  Dim ox, oy, dx, dy As Integer

  Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
    ' obrázky cca 60x60 px s průhledností
    obr(0) = Image.FromFile("E:\NET BASIC\Bitmap\obr1.gif")
    obr(1) = Image.FromFile("E:\NET BASIC\Bitmap\obr2.gif")
    obr(2) = Image.FromFile("E:\NET BASIC\Bitmap\obr3.gif")
    ox = 10 : oy = 10
    dx = 0 : dy = 50
  End Sub

  Private Sub Form1_Paint(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    e.Graphics.DrawImage(obr(0), ox, oy)
    e.Graphics.DrawImage(obr(1), ox + dx, oy + dy)
    e.Graphics.DrawImage(obr(2), ox + 2 * dx, oy + 2 * dy)
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    If dx = 0 Then
      ox = 20 : oy = 15
      dx = 40 : dy = 0
    Else
      ox = 10 : oy = 10
      dx = 0 : dy = 30
    End If    Me.Invalidate() ' vyvolá Paint formuláře
  End Sub

End Class

Hodnoty pro umístění obrázků si upravte podle velikosti obrázků

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zapomněl jsem odentrovat:

End If Me.Invalidate() ' vyvolá Paint formuláře

  End If    
  Me.Invalidate() ' vyvolá Paint formuláře

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Děkuji, po drobných úpravách jsem i pochopil. Moc děkuji

Imports System.Drawing

Public Class Form1
    Dim obr(2) As Image
    Dim x, y, obraz As Integer

    Private Function Vykresli(ByVal cisloPole, ByVal naX, ByVal naY)
        obraz = cisloPole
        x = naX
        y = naY
        Me.Invalidate()
    End Function

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        obr(0) = Image.FromFile("C:\== Programovani ==\grafická sada\__RAILAGE\ikL_zs.png")
        obr(1) = Image.FromFile("C:\== Programovani ==\grafická sada\__RAILAGE\ikL_zvc.png")
        obr(2) = Image.FromFile("C:\== Programovani ==\grafická sada\__RAILAGE\ikL_obs.png")
    End Sub

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        e.Graphics.DrawImage(obr(obraz), x, y)
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Vykresli(1, 70, 180)
    End Sub

End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback