Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Фильтрация Добавлено: 12.12.05 23:46  

Автор вопроса:  Gogic
Если у кого есть примеры функций, реализующих (билинейную, трилинейную etc.) фильтрацию растра при изменении размера, поделитесь, плиз, или киньте линк.
Заранее благодарен.

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #1 Добавлено: 13.12.05 16:40
Что-то сделать пытался. Но функция еще сырая.

Ответить

Номер ответа: 2
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #2 Добавлено: 14.12.05 20:31
билинейную, трилинейную etc.)

Это всмысле? Сглаживание чтоль? ;/

Ответить

Номер ответа: 3
Автор ответа:
 GSerg



Вопросов: 0
Ответов: 1876


 Профиль | | #3 Добавлено: 15.12.05 05:19
http://alglib.sources.ru/interpolation/bilinearresample.php

Ответить

Номер ответа: 4
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #4
Добавлено: 16.12.05 23:21
Dim OutX As Long, OutY As Long 'Main loop vars
Dim InData() As RGBQUAD
Dim OutData() As RGBQUAD
Dim OldW As Long, OldH As Long 'Size of the Data

Dim InX As Double, InY As Double 'Coordinates of New pixel in old-pixels
Dim dx As Double, dy As Double 'offsets from x,y to inx,iny
Dim r As Byte, g As Byte, B As Byte 'accumulators
Dim X As Long, Y As Long 'loop variables in GetColor
Dim x1 As Long, y1 As Long 'coords of surrounding pixels
Dim x2 As Long, y2 As Long
Dim x3 As Long, y3 As Long
Dim x4 As Long, y4 As Long
Dim MaxX As Long, MaxY As Long 'old-data related
Dim MeEn As Boolean
Dim rgb1 As RGBQUAD, rgb2 As RGBQUAD
Dim rgb3 As RGBQUAD, rgb4 As RGBQUAD

ReDim OutData(0 To NewW - 1, 0 To NewH - 1)

OldW = UBound(Data, 1) + 1
OldH = UBound(Data, 2) + 1
MaxX = OldW - 1
MaxY = OldH - 1


For OutY = 0 To NewH - 1
    ShowProgress OutY / NewH * 100, Not MeEn
    
    InY = (OutY + 0.5) * OldH / NewH
    
    y1 = Int(InY - 0.5 + 0.00001)
    dy = InY - y1 - 0.5
    If y1 < 0 Then
        If TexMode Then
            y1 = MaxY
        Else
            y1 = 0
        End If
    End If
    
    y2 = y1
    
    y3 = y1 + 1
    If y3 > MaxY Then
        If TexMode Then
            y3 = 0
        Else
            y3 = MaxY
        End If
    End If
    
    y4 = y3
    
    For OutX = 0 To NewW - 1
        InX = (OutX + 0.5) * OldW / NewW
        

        x1 = Int(InX - 0.5 + 0.00001)
        dx = InX - x1 - 0.5
        If x1 < 0 Then
            If TexMode Then
                x1 = MaxX
            Else
                x1 = 0
            End If
        End If
    
        x2 = x1 + 1
        If x2 > MaxX Then
            If TexMode Then
                x2 = 0
            Else
                x2 = MaxX
            End If
        End If
    
        x3 = x1
    
        x4 = x2
    
    
        rgb1 = InData(x1, y1)
        rgb2 = InData(x2, y2)
        rgb3 = InData(x3, y3)
        rgb4 = InData(x4, y4)
        OutData(OutX, OutY).rgbRed = ((CDbl(rgb2.rgbRed) - rgb1.rgbRed) * dx + rgb1.rgbRed) * (1# - dy) + ((CDbl(rgb4.rgbRed) - rgb3.rgbRed) * dx + rgb3.rgbRed) * dy
        OutData(OutX, OutY).rgbGreen = ((CDbl(rgb2.rgbGreen) - rgb1.rgbGreen) * dx + rgb1.rgbGreen) * (1# - dy) + ((CDbl(rgb4.rgbGreen) - rgb3.rgbGreen) * dx + rgb3.rgbGreen) * dy
        OutData(OutX, OutY).rgbBlue = ((CDbl(rgb2.rgbBlue) - rgb1.rgbBlue) * dx + rgb1.rgbBlue) * (1# - dy) + ((CDbl(rgb4.rgbBlue) - rgb3.rgbBlue) * dx + rgb3.rgbBlue) * dy
        
        
        'OutData(OutX, OutY).rgbRed = r
        'OutData(OutX, OutY).rgbGreen = g
        'OutData(OutX, OutY).rgbBlue = B
    Next OutX
Next OutY

Это вроде билинейная интерполяция.

Ответить

Номер ответа: 5
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #5 Добавлено: 19.12.05 21:42
Какие страшные слова :)

так это сглаживание или что?

Ответить

Номер ответа: 6
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #6
Добавлено: 20.12.05 19:04
Растягивание/сжимание рисунка.
Линейная интерполяция - это когда считаеся, что цвет от пикселя к пикселю меняется линейно.
Би- - то есть по двум направлениям (по иксу и игреку).
У меня есть еще один метод фильтрации - на основе площадей. Он крут для вписывания в меньшие размеры.
А этот как-раз лучше годится для растяжения.

Ответить

Номер ответа: 7
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #7 Добавлено: 21.12.05 21:09
А, все ясно, thx.
А трилинейная – это по X, Y и Z да?

Ответить

Номер ответа: 8
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #8
Добавлено: 22.12.05 16:11
А трилинейная – это по X, Y и Z да?

Без понятия. Думаю что да, но как можно фильтровать картинку по z я не знаю...
PS. На ссылке от GSerg написано подробнее, советую заглянуть.

Ответить

Номер ответа: 9
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #9 Добавлено: 23.12.05 12:22
Трилинейная фильтрация - это когда помимо интерполяции по иксу и игреку, идет интерполяция между двумя mip-картами.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам