Otočenia bitmapy a následne vykreslenie do picturebox – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Otočenia bitmapy a následne vykreslenie do picturebox – .NET – Fórum – Programujte.comOtočenia bitmapy a následne vykreslenie do picturebox – .NET – Fórum – Programujte.com

 

Trebor0
Stálý člen
6. 10. 2014   #1
-
0
-

Zdravím, mám nasledujúci kód na otáčanie hodinových ručičiek (bitmapy) v picturebox

	Dim btmp As New Bitmap(My.Resources.hodinova, velkosthodiny, velkosthodiny)
        Static ang As Decimal = 0
        Dim W As Integer = btmp.Width
        Dim H As Integer = btmp.Height
        Dim gr As Graphics = e.Graphics
        Dim m As Matrix = New Matrix
        m.RotateAt(ang, New Point(W \ 2 + 2, H \ 2 + 2))
        gr.Transform = m
        gr.DrawImage(btmp, poziciahodiny)
        ang = (ang + prirastok) Mod 360

Dokým je bod poziciahodiny nastavena na (0,0) tak sa hodinová ručička bez problémov otáča tak ako má, ale keď ju chcem nastaviť na napr. (150, 150), keď ju chcem dať dostredu picturebox začne sa mi otáčať okolo úplne inej osi.

Nemalo by so premennou poziciahodiny nastavovat pozicia lavehohorného rohu bitmapy vzhladom na picturebox ? Prečo sa neotáča rovnako akurat v inej pozicii v picturebox ?

Vopred ďakujem za akekolvek odpovede.

Nahlásit jako SPAM
IP: 178.40.143.–
Matěj Andrle+1
Grafoman
6. 10. 2014   #2
-
0
-

#1 Trebor
Já bych rozhodně neotáčel obrázek ručičky, nýbrž jej stále vykresloval skrz Graphics!

graphics.RotateTransform(angle);
Nahlásit jako SPAM
IP: 78.136.181.–
Trebor0
Stálý člen
9. 10. 2014   #3
-
0
-

a mozes mi prosim ta v rychlosti napisat ako pracovat s tým rotatetransform ? lebo ze to sa neaplikuje na uz existujuci obrazok a nech skusam ako skusam furt mi to nefunguje.

Nahlásit jako SPAM
IP: 178.40.143.–
Matěj Andrle+1
Grafoman
9. 10. 2014   #4
-
0
-

#3 Trebor
Graphics je abstraktní třída pracující s Image. Takže:

Graphics.FromImage(Image.FromFile("rucicka.png")).RotateTransform(angle);

Záleží na tom, jak to chceš poskládat. Já bych vedl Graphics PictureBoxu a ručičky - ručičku (Image) budeš vykreslovat do PictureBoxu a otáčet za pomoci Graphics z Image - tím to bude dít jak si přeješ...

Nahlásit jako SPAM
IP: 78.136.178.–
Trebor0
Stálý člen
9. 10. 2014   #5
-
0
-

No už som to tam nejak spratal. Díky a ešte mám jeden problém (už nie hodinky ale tiež tam ide o točenie obrázkov) Mám niečo ako koleso štastia aj s jazýčkom, ktorý a zachytáva o koleso. Mám nastavené

JazycekBox.parent = KolesoBox

otocim kolesom pomocou KolesoBox.Invalidate() a následne, chcem vykresliť aj JazycekBox, lebo ten ma na pozadi stale to nepootocene koleso no ked dam JazycekoBox.Invalidate(), tak on ako keby vykreslil zase aj KolesoBox, cize som "uväznaný" v nekonečnej slučke a nikdy nemôžem dostať po vykreslení aby bolo aj pozadie jazycku spravne vykreslene

Připojen obrázek.

Nevieš mi pls poradit ako na to ? Zatial díky.

Nahlásit jako SPAM
IP: 178.40.143.–
Matěj Andrle+1
Grafoman
9. 10. 2014   #6
-
0
-

#5 Trebor
Kdybych ten kód viděl...

Nahlásit jako SPAM
IP: 78.136.178.–
Trebor0
Stálý člen
9. 10. 2014   #7
-
0
-

   

Private Sub PictureBox2_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox2.Paint
        btmp = New Bitmap(PictureBox2.Image, New Size(PictureBox2.Width, PictureBox2.Height))
        Dim W As Integer = btmp.Width
        Dim H As Integer = btmp.Height
        Dim gr As Graphics = e.Graphics
        Dim m As Matrix = New Matrix
        m.RotateAt(ang, New Point(W \ 2, H \ 2))
        gr.Transform = m
        gr.DrawImage(btmp, New Point(0, 0))
    End Sub



    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        PictureBox1.Invalidate()
        PictureBox2.Invalidate()
    End Sub



    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
        btmp2 = New Bitmap(PictureBox1.Image, New Size(PictureBox1.Height, PictureBox1.Height))
        Dim W2 As Integer = btmp2.Width
        Dim H2 As Integer = btmp2.Height
        Dim gr2 As Graphics = e.Graphics
        Dim m2 As Matrix = New Matrix
        m2.RotateAt(ang2, New Point(W2 \ 2, H2 \ 2))
        gr2.Transform = m2
        gr2.DrawImage(btmp2, New Point(0, 0))
        ang2 -= 3
    End Sub

Picturebox1 je koleso a picturebox2 je jazycek a ma nastaveny parent = picturebox1

Nahlásit jako SPAM
IP: 178.40.143.–
Matěj Andrle+1
Grafoman
9. 10. 2014   #8
-
0
-

#7 Trebor
Pardon - já bych to udělal zcela jinak - bez prasáren atd. Takto se hrabat ve zbytečně složitém kódu - na to si budu muset udělat čas... (Momentálně jej nemám.) Doporučuji naučit se konečně OOP! Tedy oddělovat grafiku od logiky a oddělovat vrstvy programu... Nejprve udělat jádro programu - zcela nezaujatou knihovnu, kterou by šlo přidávat do jakéhokoliv projektu - a až na tu lepit další vrstvu - více zaujatou. Takto se má programovat - ne naplácat vše do grafické části programu - v tom se nedá vyznat a není divu, že to pak nejede...

Nahlásit jako SPAM
IP: 78.136.178.–
Matěj Andrle+1
Grafoman
10. 10. 2014   #9
-
0
-

#7 Trebor
MatejIAndrle@email.cz - můžeš mi prosím napsat na mail, trochu s tebou cosi proberu - sem pak vložíš řešení...

Nahlásit jako SPAM
IP: 78.136.165.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 51 hostů

Podobná vlákna

Vykreslenie grafov — založil Anonymní uživatel

Vykreslenie obrázku — založil Majo

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý