Jump to content
vladiii

Imagini [Visual Basic]

Recommended Posts

Posted

Initial postat aici: vladii.wordpress.com

Salut ! Astazi voi scrie un tutorial legat de programare, mai exact, Visual Basic. Ce vom invata ? Vom invata despre Imagini, Pixeli, R, G, B, GrayScale, etc. Sa incepem !

Ce este o imagine ? O imagine reprezinta mai multe obiecte adunate intr-un tot unitar. O imagine este o insiruire de pixeli. Ce este un pixel ? Pixelul este cea mai mica subdiviziune a unei imagini. Pixelul apare sub forma unui punct [.] si are diferite culori. In concluzie, o imagine este formata din mai multi pixeli cu diferite culori.

Valoarea unei culori este de obicei pe 32 de biti [colorref] (valoarea unei culori este stocata pe 4 bytes, doar 3 sunt importanti -> R, G, B), in format RGB. Ce inseamna format RGB ? R=Red [Rosu], G=Green [Verde], B=Blue [Albastru]. Orice culoare se poate obtine prin amestecul a diferite cantitati din aceste 3 culori.

Acum sa aflam cum putem seta un pixel la o anumita culoare, cum putem scoate R, G, B dintr-o culoare si, mai tarziu [cod sursa], sa folosim GrayScale.

1. Cum setam o un pixel la o anumita culoare ? Pentru aceasta, folosim 2 functii API din libraria GDI32, foarte importante, si anume:


Public Declare Function GetPixel Lib “GDI32? (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long

Public Declare Function SetPixel Lib “GDI32? (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long

Despre Functii API am invatat intr-un tutorial anterior (il gasiti pe vladii.wordpress.com). Sa explicam prima functie. GetPixel preia culoarea pixelului aflat la coordonatele (x,y). ByVal hDC As Long reprezinta handleul canvasului imaginii (am povestit despre Handleuri in acelasi tutorial despre Functii API). Handleul Canvasului imaginii se noteaza astfel: Picture1.hDC, unde Picture1 este o imagine de pe Formularul dumneavoastra. Sa dau un exemplu concret de extragere a culorii unui pixel si o atribuie variabilei color (de tip Long):


Dim color as Long
color = GetPixel(Picture1.hDC, 100, 100)

Cum setam unui pixel o anumita culoare ? Simplu, folosind functia API, SetPixel. Cum functioneaza ea ? La fel ca cea de mai sus, spre exemplu: Call SetPixel(Picture1.hDC, 100, 100, color), unde color este culoarea care vrem sa ii fie atribuita pixelului de coordinate (100, 100) din imaginea Picture1.

2. Cum extragem R, G, B dintr-un ColorRef (dintr-o culoare) ? Urmatorul cod sursa face exact acest lucru, sa-l vedem si analizam (bineinteles, eu am exemplificat pana acum codurile, folosind un modul in care am adaugat functiile API. Un modul se adauga in felul urmator: Project -> Add Module -> New (Module) -> Open):


Dim color as Long
color = GetPixel(Picture1.hDC, 100, 100)
Dim R as Integer
Dim G as Integer
Dim B as Integer
R = color Mod 256
G= (color \ &H100) Mod 256
B = (color \ &H10000) Mod 256

Asa extragem R, G, B dintr-o culoare. Acum sa creem o aplicatie care transforma o imagine (imagine color, bineineles), in una alb-negru (cand spun imaginea alb-negru ma refer la GrayScale, adica la orice nuanta de gri, culorile obtinute prin amestecul non-culorilor alb si negru). GrayScale se obtine atribuind lui R valoarea (R+G+B) \ 3, lui G valoarea (R+G+B) \ 3, iar lui B valoarea (R+G+B) \ 3. Deci, va trebuie sa avem pe Formular 3 butoane, un Common Dialog(care il introducem prin: Project -> Components -> Microsoft common Dialog Control 6.0 -> Ok [acesta ne va folosi pentru a incarca imaginea din calculator]), si un PictureBox, cu denumirea Picture1.De mentionat ca trebuie sa aveti adaugat un modul in care sa declarati functiile API: GetPixel si SetPixel. Imaginea urmatoare sper sa va clarifice lucrurile in minte despre GrayScale:

Inainte [Fara GrayScale] -> Dupa [Cu GrayScale]

avatargv5.png

-> avatar2tv2.jpg

Sa transcriem codul:

Codul pentru Load Image, pus pe butonul cu denumirea Command1:


Dim filelocation As String
CommonDialog1.Filter = “All images”
CommonDialog1.ShowOpen
filelocation = CommonDialog1.FileName
Picture1.Picture = LoadPicture(filelocation)

Codul pentru butonul, care daca apasam pe el, se produce transformarea in alb-negru a imaginii incarcate anterior:


Dim a As Integer
Dim b As Integer
Dim color As Long
Dim colorR As Integer
Dim colorG As Integer
Dim colorB As Integer
Dim pixel As Integer
For a = 1 To 1000
For b = 1 To 1000 ‘aceste 2 Foruri parcurg imaginea
color = GetPixel(Picture1.hDC, a,
colorR = color Mod 256
colorG = (color \ &H100) Mod 256
colorB = (color \ &H10000) Mod 256
pixel = (colorR + colorG + colorB) \ 3
Call SetPixel(Picture1.hDC, a, b, RGB(pixel, pixel, pixel))
Next
Next

Codul pentru butonul de iesire:


Unload Me

Cam atat pentru acest tutorial ! Bafta, si nu uitati ! Mai treceti pe la http://vladii.wordpress.com deoarece in fiecare zi acest site va fi updatat cu noi tutoriale facute de mine ! Salut !

Bibliografie:


[url]http://www.devx.com/vb2themax/Tip/18427[/url]
[url]http://vladii.wordpress.com/2007/08/25/imagini-visual-basic/[/url]

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...