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 742×

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 Facebook spouští službu Marketplace V ČR

Facebook spouští službu Marketplace V ČR

Společná platforma Marketplace usnadní lidem na Facebooku vyhledávání, nákup a prodej použitého zboží na lokální úrovni. Bude tak přímou konkurencí pro weby a aplikace se stejným zaměřením jako je například Letgo, Bazoš, Aukro, Sbazar a další.

Reklama
Reklama
Obrázek ke článku DistrCut – optimalizace pomocí distribuované inteligence

DistrCut – optimalizace pomocí distribuované inteligence

Optimalizační systémy, které jsem dosud popisoval, se týkaly vždy optimalizace na jednom zařízení. Optimalizovalo se dělení tyčového materiálu na jedné pile, vypalování plošného materiálu na jednom plazmovém stroji, řídilo se tavení na jedné elektrické obloukové peci.

Ve výrobním procesu je však často nutné optimalizovat činnost celého výrobního úseku, kde je více různých objektů odlišného typu a koordinovat činnost těchto objektů k dosažení společného cíle, zpravidla kvality finálního výrobku. Řešení tohoto problému umožňuje distribuovaná inteligence.

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 © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý