|
|
|
Сделать Ч-Б изображение
|
|||
|---|---|---|---|
|
#18+
как сделать Ч-Б изображение, имея RGB матрицу? где-то была формула, мол R*128+G*20+... /3 но это не проходит. аффтопитезь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 15:47 |
|
||
|
Сделать Ч-Б изображение
|
|||
|---|---|---|---|
|
#18+
ja delal tak (R+G+B)/3 vygljadelo neploho, hotja eto ne sovsem to... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.01.2007, 22:36 |
|
||
|
Сделать Ч-Б изображение
|
|||
|---|---|---|---|
|
#18+
В самом примитивном варианте: Y = 0.2126 R + 0.7152 G + 0.0722 B или Y = 0.299 R + 0.587 G + 0.114 B ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 01:46 |
|
||
|
Сделать Ч-Б изображение
|
|||
|---|---|---|---|
|
#18+
применить пиксельный шейдер uniform vec2 bw; uniform sampler2D tex; const vec3 lumCoeff = vec3(0.2125, 0.7154, 0.0721); void main() { vec4 texture = texture2D(tex, gl_TexCoord[0]); vec2 lum_v=vec2(1.0, dot(texture.xyz, lumCoeff)); vec3 lum=vec3(dot(lum_v, bw)); gl_FragColor=vec4(lum, texture.w); // сохраним альфу из оригинальной текстуры } или // m_iWidth & m_iHeight - текущее разрешение экрана #define m_iWidth 640 #define m_iHeight 480 // нам потребуются 2 буффера: m_pFrame = new ubyte [m_iWidth*m_iHeight*3]; m_pBuffer = new ubyte [m_iWidth*m_iHeight*3]; void ReplaceBW (float fValue) { if (!fValue || !m_pFrame || !m_pBuffer) // если fValue == 0, значит изображение полностью цветное return; glDisable(GL_TEXTURE_2D); if (fValue <= 1.0f) { // 1. get image from screen glFlush(); glFinish(); glReadPixels (0, 0, m_iWidth, m_iHeight, GL_RGB, GL_UNSIGNED_BYTE, m_pFrame); // 2. convert to bw int j = 0, k = int(fValue*255.0f), s = 0, r, g, b; for (int i=0; i<m_iWidth*m_iHeight; i++) { r = m_pFrame[j]; g = m_pFrame[j+1]; b = m_pFrame[j+2]; s = (r + 2*g + b)*k >> 2; // "реальное" соотношение 0.3*r + 0.59*g + 0.11*b, зато это намного быстрее m_pBuffer[j+0] = (r*(255-k) + s) >> 8; m_pBuffer[j+1] = (g*(255-k) + s) >> 8; m_pBuffer[j+2] = (b*(255-k) + s) >> 8; j += 3; } } // 3. draw to frame buffer glRasterPos2i(-m_iWidth/2, -m_iHeight/2); glDrawPixels(m_iWidth, m_iHeight, GL_RGB, GL_UNSIGNED_BYTE, m_pBuffer); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.01.2007, 11:50 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=34239224&tid=1346336]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
144ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 481ms |

| 0 / 0 |
