Jam fillestar ne programim dhe me eshte kerkuar te realizoj nje kod te ekzekutueshem ne gjuhen C++ per te kthyer fotot nga me ngjyra ne bardh e zi !!
Jam fillestar ne programim dhe me eshte kerkuar te realizoj nje kod te ekzekutueshem ne gjuhen C++ per te kthyer fotot nga me ngjyra ne bardh e zi !!
Mesa duket nuk eshte e nivelit tuaj qe nuk e komentoni
Si fillestar qe je (sic shkruan vete), ndoshta nuk te konsideroi njeri si "sfidant".
Une akoma s'e kam te qarte nese kjo eshte nje sfide (sfiduesi gjithmone pretendon se eshte me i afte se te sfiduarit),
eshte kerkese per koment (uala..., ja dhe komenti i pare), apo eshte kerkese per ndihme.
Gjithsesi do te te jap edhe nje ndihme (meqenese komentin e bera tashme, dhe sa per sfiden, perpara se te qahesh per nivelin tone, ndoshta duhet te "dalesh" me pare vete nga niveli i fillestareve).
Ka disa menyra per ta bere ate qe kerkon ti, por duke gjykuar nga problemi, (imazhe statike - fotografi), menyra me e thjeshte eshte te perdoresh GDI+.
Disa nga metodat DrawImage(...) te klases Graphics, pranojne si argument nje pointer ne nje objekt ImageAttributes.
Por me pare duhet te aplikosh nje matrice tek ky objekt duke thirrur
imageAttributes.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault, ColorAdjustTypeBitmap);
I gjithe truku eshte te dish se me cfare vlerash te iniciosh elementet e matrices. Diku ndesha ne nje adrese (ne internet) ku jepeshin keto vlera per te realizuar pikerisht ate qe kerkon ti, por nuk po e gjej se ku.
Gjithsesi ky eshte problemi yt, dhe s'ka arsye te kerkoj une per ty.
sergei,
nje informaticien i zoti nuk eshte ai qe di gjithēka, por ai qe di te gjeje ate qe i duhet kur i duhet.
Ne teori kjo qe thua ti pavaresisht nga gjuha e programimit qe perdor ne parim behet ashtu si tha parafolesi, sekuenca e bitmap me vlerat e ngjyrave (zakonisht RGB) dhe transformimi i vlerave te ngjyrave duke e shumezuar me nje matrice me vlera te caktuara.
vlerat e matrices i gjen kollaj ne internet, kurse menyra e aplikimit varet se ēfare gjuhe perdor, nga struktura e te dhenave qe perdoret per te perfaqesuar imazhin(zakonisht bitmap).
Tani une nuk njoh mire win32 api, aq me teper menyren se si trajtohen imazhet nepermjet GDI, dhe nuk kam pse ta mesoj deri ne momentin qe nuk me sherben per asgje.
Te hysh ne detaje te tilla te takon ty.
Mire qe nuk je i zoti te zgjidhesh nje detyre qe te takon ty ta zgjidhesh, jo vetem qe nuk di detajet teknike por as qe e ke idene se si mund te behet, dhe vjen edhe na provokon duke na kujtuar nivelin...
Pyetja eshte me mangesi te detajeve sic jane: per cfar sistemi operativ (mund te sypozohet per windows), ne cfar skedari ndodhet fotoja, preferencat per "perhirezim" te ngjyrave.
Si pergjithesim nje menyre do te ishte te behet iteracioni neper cdo pixel te fotografise, lexohen rbg vlerate nga ngjyra e pixelit aktual. behet perhirezimi i po atij pixeli ne baze te rbg vlerave. Rezultat i dashur ose i padashur do te jet veshtrimi i perhiresimit per foto te medha.
Disclaimer
Pa marre parasyshe se si do te mundohesh me e paraqite kete problem tendin si sfide apo apel per ndihme, une nuk do ta kryej programin per ty.
Gjeta se paku nje ulr tjeter, ne te cilen tregohet se
vlera e luminances = 0.3 * Red + 0.59 * Green + 0.11 * Blue
e per pasoje matrica duhet te iniciohet me vlerat:
0.30, 0.30, 0.30, 0, 0
0.59, 0.59, 0.59, 0, 0
0.11, 0.11, 0.11, 0, 0
0, 0, 0, 1, 0
0, 0, 0, 0, 1
Shenim: Gjuhet "managed" (C#, vb.NET,...) ekspozojne vetem GDI+ perdoruesve te tyre (dhe jo GDI-ne), edhe pse nuk i referohen me kete emer, por si klasa qe ndodhen ne namespace-n "System.Drawing"
Ndryshuar pėr herė tė fundit nga Neritan Hyso : 20-01-2010 mė 10:38
Ajo sfide nuk ishte per mua me programiuesit por per ata qe jane te afte ne programim!Nuk ishte e nevojshme pet moral.Nese ishit ne gjendje per te bere dicka mund edhe ta postonit!
Faleminderit Neritan!
Sergei, edhe une vete kam kerkuar ndihme nja dy here, dhe pertej kesaj, shume gjera i kam mesuar duke lexuar pergjigjet qe anetare forumesh u kane dhene pyetjeve qe te tjere kishin bere para meje (ne forume te huaja).
Dhe ne te gjitha rastet, personat qe kerkonin ndihme, e kishin provuar nje here vete me pare ta zgjidhnin problemin (pasi pershkruanin deri ku kishin arritur, dhe cili ishte problemi qe kishin ndeshur), dhe pyesnin nese dikush tjeter kishte ndeshur ne te njejtin problem, dhe a ishte i gatshem ta ndante me ta zgidhjen.
Te kerkosh ndihme pa demostruar se ke shpenzuar qofte dhe 1 sekonde nga koha jote, dhe te pretendosh qe te tjeret te shpenzojne kohen e tyre, ne nje "sfide", jo me ty (lancuesin e sfides), por me njeri-tjetrin, ne nje perpjekje per te demostruar para teje (e kush je ti edhe nje here?) se kush eshte me i zoti (kjo ishte ideja jote e sfides?),
eshte manipuluese, dhe si e tille, fyese.
Arsyeja pse une shkrova heren e pare ne kete kollone, nuk ishte per t'iu pergjigjur "sfides" tende, por sepse ti fillove te flisje me vete(n), dicka e pakendshme per t'u konstatuar.
Dhe lidhur me moralin e prafolesve... per mendimin tim te kane kursyer (ashtu si dhe une). Ne kulmin e ndonje debati qe kemi pasur ne te shkuaren, ndaj meje s'kane qene edhe aq "konstruktiv" (ok, edhe une kam qene ironik sa kam dashur).
Neritan,nuk kam dashur aspak te fyej askend dhe ti tregoj ndokujt se cilit nivel i perket ai!Problemi eshte se me ke(ni) keqkuptuar ne ate qe une e qujta sfide!
Per sa i perket ceshtjes se une nuk kam shpenzuar asnje sekonde te kohes time ne kerkim te zgjidhjes se problemit kjo nuk eshte aspak e vertete!
Nese doje te dije se deri ku kisha arritur:
1.Public Sub BlackAndWhite(ByVal picPictureBox As PictureBox)
2.Dim X As Single
3.Dim Y As Single
4.Dim PrevColor As Long
5.Dim NewColor As Long
6.Dim TempColor As Single
7.
8.For Y = 0 To picPictureBox.ScaleHeight - 1
9. For X = 0 To picPictureBox.ScaleWidth - 1
10.PrevColor = GetPixel(picPictureBox.hdc, X, Y)
11. TempColor= Round2((GetRed(PrevColor) + GetGreen(PrevColor) + GetBlue(PrevColor)) / 3)
12.NewColor = RGB(TempColor, TempColor, TempColor)
13.SetPixelV picPictureBox.hdc, X, Y, NewColor
14.Next X
15.Next Y
16.
17.End Sub
18.
19.Public Function GetRed(Color As Long) As Integer
20.GetRed = Color And 255
21.End Function
22.
23.Public Function GetGreen(Color As Long) As Integer
24.GetGreen = (Color And 65280) \ 256
25.End Function
26.
27.Public Function GetBlue(Color As Long) As Integer
28.GetBlue = (Color And 16711680) \ 65535
29.End Function
30.
31.Public Function Round2(Number As Single) As Integer
32.If Number - Round(Number) >= 0.05 Then Number = Round(Number, 1) + 0.1
33.If Number - Round(Number) < 0.05 Then Number = Round(Number, 1)
34.Round2 = Number
35.End Function
Por shtu si e kam theksuar edhe ne fillim "KERKOJA NJE KOD TE EKZEKUTUESHEM"
Thashe se jam fillestar (ne C++) por nje gje e tille nuk eshte e vertete ne JAVA!
Ndryshuar pėr herė tė fundit nga Sergei : 21-01-2010 mė 16:42
Neritan,nuk kam dashur aspak te fyej askend dhe ti tregoj ndokujt se cilit nivel i perket ai!Problemi eshte se me ke(ni) keqkuptuar ne ate qe une e qujta sfide!
Per sa i perket ceshtjes se une nuk kam shpenzuar asnje sekonde te kohes time ne kerkim te zgjidhjes se problemit kjo nuk eshte aspak e vertete!
Nese doje te dije se deri ku kisha arritur:
1.Public Sub BlackAndWhite(ByVal picPictureBox As PictureBox)
2.Dim X As Single
3.Dim Y As Single
4.Dim PrevColor As Long
5.Dim NewColor As Long
6.Dim TempColor As Single
7.
8.For Y = 0 To picPictureBox.ScaleHeight - 1
9. For X = 0 To picPictureBox.ScaleWidth - 1
10.PrevColor = GetPixel(picPictureBox.hdc, X, Y)
11. TempColor= Round2((GetRed(PrevColor) + GetGreen(PrevColor) + GetBlue(PrevColor)) / 3)
12.NewColor = RGB(TempColor, TempColor, TempColor)
13.SetPixelV picPictureBox.hdc, X, Y, NewColor
14.Next X
15.Next Y
16.
17.End Sub
18.
19.Public Function GetRed(Color As Long) As Integer
20.GetRed = Color And 255
21.End Function
22.
23.Public Function GetGreen(Color As Long) As Integer
24.GetGreen = (Color And 65280) \ 256
25.End Function
26.
27.Public Function GetBlue(Color As Long) As Integer
28.GetBlue = (Color And 16711680) \ 65535
29.End Function
30.
31.Public Function Round2(Number As Single) As Integer
32.If Number - Round(Number) >= 0.05 Then Number = Round(Number, 1) + 0.1
33.If Number - Round(Number) < 0.05 Then Number = Round(Number, 1)
34.Round2 = Number
35.End Function
Por shtu si e kam theksuar edhe ne fillim "KERKOJA NJE KOD TE EKZEKUTUESHEM"
Thashe se jam fillestar (ne C++) por nje gje e tille nuk eshte e vertete ne JAVA!
Krijoni Kontakt