vladiii Posted August 25, 2007 Report Posted August 25, 2007 Initial postat aici: vladii.wordpress.comSalut ! 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, , 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 LongPublic Declare Function SetPixel Lib “GDI32? (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As LongDespre 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 Longcolor = 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 Longcolor = GetPixel(Picture1.hDC, 100, 100)Dim R as IntegerDim G as IntegerDim B as IntegerR = color Mod 256G= (color \ &H100) Mod 256B = (color \ &H10000) Mod 256Asa 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+ \ 3, lui G valoarea (R+G+ \ 3, iar lui B valoarea (R+G+ \ 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]-> Sa transcriem codul:Codul pentru Load Image, pus pe butonul cu denumirea Command1:Dim filelocation As StringCommonDialog1.Filter = “All images”CommonDialog1.ShowOpenfilelocation = CommonDialog1.FileNamePicture1.Picture = LoadPicture(filelocation)Codul pentru butonul, care daca apasam pe el, se produce transformarea in alb-negru a imaginii incarcate anterior:Dim a As IntegerDim b As IntegerDim color As LongDim colorR As IntegerDim colorG As IntegerDim colorB As IntegerDim pixel As IntegerFor a = 1 To 1000For b = 1 To 1000 ‘aceste 2 Foruri parcurg imagineacolor = GetPixel(Picture1.hDC, a, colorR = color Mod 256colorG = (color \ &H100) Mod 256colorB = (color \ &H10000) Mod 256pixel = (colorR + colorG + colorB) \ 3Call SetPixel(Picture1.hDC, a, b, RGB(pixel, pixel, pixel))NextNextCodul pentru butonul de iesire:Unload MeCam 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] Quote
Tot_zeu Posted September 13, 2007 Report Posted September 13, 2007 Foarte util..puneti cate un picture1.refresh dupa fiecare next pt un efect mai lin Quote