Práce s grafikou XI. – Převracení obrazu
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Práce s grafikou XI. – Převracení obrazuPráce s grafikou XI. – Převracení obrazu

 

Práce s grafikou XI. – Převracení obrazu

Google       Google       6. 1. 2006       6 187×

Dnes se nebudu zabývat psaním kódu, který zpracovává obraz pixel po pixelu, ale zaměřím se na API funkce, které nám tento proces výrazně zjednodušují a hlavně zrychlují...

Reklama
Reklama

KK tomu se používá funkce StretchBlt, jejíž deklaraci právě vidíte.


Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

Podle toho, s jakými parametry tuto funkci voláme, otáčíme obraz. První ho otočíme kolem vertikální osy, tomuto efektu se říká Mirror. Funkci potom voláme takto v proceduře:


Public Sub Mirror(Img As PictureBox)
    Img.AutoRedraw = True
    StretchBlt Img.hdc, Img.ScaleWidth, 0, -Img.ScaleWidth, Img.ScaleHeight, Img.hdc, 0, 0, Img.ScaleWidth, Img.ScaleHeight, vbSrcCopy
    Img.Refresh
End Sub

Takže po dlouhé době je to kratší kód. A teď se podíváme ještě na takzvaný Flip, tento efekt funguje na stejném principu, jen se obraz otáčí kolem osy horizontální. Změna volané funkce je jen nepatrná a spočívá v přehození mínusu a několika parametrů, tak jak to vidíte…


StretchBlt Img.hdc, 0, Img.ScaleHeight, Img.ScaleWidth, -Img.ScaleHeight, Img.hdc, 0, 0, Img.ScaleWidth, Img.ScaleHeight, vbSrcCopy

…pokud nad tím budete chvíli dumat, určitě přijdete na to, proč to tak je. S touto funkcí toho jde dělat spoustu. Co třeba zvětšit si obrázek na 120%? Proč ne? Je to záležitost chviličky a stačí k tomu tohle:


Public Sub Lupa(Img As PictureBox)
    Img.AutoRedraw = True
    StretchBlt Img.hdc, 0, 0, Img.ScaleWidth * 1.2, Img.ScaleHeight * 1.2, Img.hdc, 0, 0, Img.ScaleWidth, Img.ScaleHeight, vbSrcCopy
    Img.Refresh
End Sub

Nebo si zkuste, co umí tohle:


Public Sub xyz(Img As PictureBox)
    Img.AutoRedraw = True
    StretchBlt Img.hdc, 0, 0, Img.ScaleWidth, Img.ScaleHeight, Img.hdc, 50, -50, Img.ScaleWidth, Img.ScaleHeight, vbSrcCopy
    Img.Refresh
End Sub

A vůbec, zkoušejte si a uvidíte co to dokáže :)

Tak někdy u dalšího dílu.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý