m2011kh
شنبه 23 آذر 1392, 21:12 عصر
سلام و خسته نباشید.
دنبال یه سورس در این زمینه بودم که اتفاقی به این کد رسیدم:
Public Sub RGB_YCrCb(pic As PictureBox)
Dim i As Long
Dim j As Long
Dim pixel As Long
Dim RGBColor1 As Integer
Dim RGBColor2 As Integer
Dim RGBColor3 As Integer
Dim y As Single, Cb As Single, Cr As Single 'YCrCb»ö
Dim RGBResult1 As Integer
Dim RGBResult2 As Integer
Dim RGBResult3 As Integer
On Error Resume Next
pic.Cls
'=================== ¿µ¿ª ¼±Åà =============
ASWidth = PicInfo.bmWidth - 1
AsHeight = PicInfo.bmHeight - 1
'=================== ¿µ¿ª ¼±Åà =============
For i = 0 To ASWidth
For j = 0 To AsHeight
'¸Þ¸ð¸® DC¸¦ ÅëÇÏ¿© »ö»óÀ» ºÐ¸®
pixel = GetPixel(MemDc_1, i, j)
'======================================
RGBColor1 = pixel Mod &H100
RGBColor2 = (pixel \ &H100) Mod &H100
RGBColor3 = (pixel \ &H10000) Mod &H100
'YCrCb»ö ¿¬»ê¼öÇà
'Red 'Green 'Blue
y = 0.299 * RGBColor1 + 0.587 * RGBColor2 + 0.114 * RGBColor3
Cb = -0.1687 * RGBColor1 - 0.3313 * RGBColor2 + 0.5 * RGBColor3 + 128
Cr = 0.5 * RGBColor1 - 0.4187 * RGBColor2 - 0.0813 * RGBColor3 + 128
'==============================================
' Ŭ·¥ÇÎ(clamping) : °Á¦·Î ȼҰª º¯°æ
If y > 255 Then y = 255
If Cb > 255 Then Cb = 255
If Cr > 255 Then Cr = 255
If y < 0 Then y = 0
If Cb < 0 Then Cb = 0
If Cr < 0 Then Cr = 0
'°¢°¢ÀÇ À§Ä¡¿¡ °á°ú¸¦ ³Ö´Â´Ù.
RGBResult1 = y 'Red
RGBResult2 = Cb 'Green
RGBResult3 = Cr 'Blue
ArrayImage1(i, j).rgbBlue = Cr
ArrayImage1(i, j).rgbGreen = Cb
ArrayImage1(i, j).rgbRed = y
'==============================================
SetPixelV pic.hdc, i, j, RGB(RGBResult1, RGBResult2, RGBResult3)
Next
Next
pic.Refresh
End Sub
خوب تا اونجا که متوجه شدم حلقه تو در تو ایجاد کرده که سطر ها و ستون هارو پیمایش میکنه و پیکس هارو دریافت کرده و ضرب در اعدادی میکنه و جایگزین میکنه.خب تا اینجا که مشکلی نیست.
سوالم اینجاست که این اعداد که کد رنگ پیکسل هارو در اون ضرب کرده چه معنایی میدن؟؟؟
یه راهنمایی کنین بقیه شو خودم میرم.
موفق و سربلند باشید.
MMD
دنبال یه سورس در این زمینه بودم که اتفاقی به این کد رسیدم:
Public Sub RGB_YCrCb(pic As PictureBox)
Dim i As Long
Dim j As Long
Dim pixel As Long
Dim RGBColor1 As Integer
Dim RGBColor2 As Integer
Dim RGBColor3 As Integer
Dim y As Single, Cb As Single, Cr As Single 'YCrCb»ö
Dim RGBResult1 As Integer
Dim RGBResult2 As Integer
Dim RGBResult3 As Integer
On Error Resume Next
pic.Cls
'=================== ¿µ¿ª ¼±Åà =============
ASWidth = PicInfo.bmWidth - 1
AsHeight = PicInfo.bmHeight - 1
'=================== ¿µ¿ª ¼±Åà =============
For i = 0 To ASWidth
For j = 0 To AsHeight
'¸Þ¸ð¸® DC¸¦ ÅëÇÏ¿© »ö»óÀ» ºÐ¸®
pixel = GetPixel(MemDc_1, i, j)
'======================================
RGBColor1 = pixel Mod &H100
RGBColor2 = (pixel \ &H100) Mod &H100
RGBColor3 = (pixel \ &H10000) Mod &H100
'YCrCb»ö ¿¬»ê¼öÇà
'Red 'Green 'Blue
y = 0.299 * RGBColor1 + 0.587 * RGBColor2 + 0.114 * RGBColor3
Cb = -0.1687 * RGBColor1 - 0.3313 * RGBColor2 + 0.5 * RGBColor3 + 128
Cr = 0.5 * RGBColor1 - 0.4187 * RGBColor2 - 0.0813 * RGBColor3 + 128
'==============================================
' Ŭ·¥ÇÎ(clamping) : °Á¦·Î ȼҰª º¯°æ
If y > 255 Then y = 255
If Cb > 255 Then Cb = 255
If Cr > 255 Then Cr = 255
If y < 0 Then y = 0
If Cb < 0 Then Cb = 0
If Cr < 0 Then Cr = 0
'°¢°¢ÀÇ À§Ä¡¿¡ °á°ú¸¦ ³Ö´Â´Ù.
RGBResult1 = y 'Red
RGBResult2 = Cb 'Green
RGBResult3 = Cr 'Blue
ArrayImage1(i, j).rgbBlue = Cr
ArrayImage1(i, j).rgbGreen = Cb
ArrayImage1(i, j).rgbRed = y
'==============================================
SetPixelV pic.hdc, i, j, RGB(RGBResult1, RGBResult2, RGBResult3)
Next
Next
pic.Refresh
End Sub
خوب تا اونجا که متوجه شدم حلقه تو در تو ایجاد کرده که سطر ها و ستون هارو پیمایش میکنه و پیکس هارو دریافت کرده و ضرب در اعدادی میکنه و جایگزین میکنه.خب تا اینجا که مشکلی نیست.
سوالم اینجاست که این اعداد که کد رنگ پیکسل هارو در اون ضرب کرده چه معنایی میدن؟؟؟
یه راهنمایی کنین بقیه شو خودم میرم.
موفق و سربلند باشید.
MMD