Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Билинейная интерполяция - Пример программы22 января 2011Оглавление: 1. Билинейная интерполяция 2. Билинейная интерполяция в компьютерной графике 3. Пример программы Ниже приведен пример программы билинейной интерполяции изображения, написанный на C Входные параметры: depth - цветовая глубина a - указатель на массив пикселей изображения, которое необходимо увеличить Нумерация элементов old_w - старая ширина изображения old_h - старая высота изображения Выходные параметры: b - указатель на массив пикселей ресемплированного изображения Нумерация элементов new_w - новая ширина изображения new_h - новая высота изображения #include <stdio.h> #include <math.h> #include <sys/types.h> /* 15 и 16 бит на пиксел-пиксел занимает ровно 2 байта */ #define PIXEL16 *b + + j) #define A16_1 *a + + c) #define A16_2 *a + + c + 1) #define A16_3 *a +* old_w) + c + 1) #define A16_4 *a +* old_w) + c) /* 24 или 32 бит на пиксел-пиксел занимает ровно 4 байта, * в 32 битном изображении 8 бит отводится на прозрачность */ #define PIXEL32 *b + + j) #define A32_1 *a + + c) #define A32_2 *a + + c + 1) #define A32_3 *a +* old_w) + c + 1) #define A32_4 *a +* old_w) + c) int bilinear { int i; int j; int l; int c; float t; float u; float tmp; u_char red, green, blue; for { for { tmp = / * ; l = floor ; if { l = 0; }else { if { l = old_h - 2; } } u = tmp - l; tmp = / * ; c = floor; if { c = 0; } else { if { c = old_w - 2; } } t = tmp - c; /* По 5 бит на каждый цвет */ if { /* Red color */ red = * * + t * * + t * u * + * u * ; /* Green color */ green = * * & 0x1f) + t * * & 0x1f) + t * u * & 0x1f) + * u * & 0x1f); /* Blue color */ blue = * * + t * * + t * u * + * u * ; /* Full pixel from R G B */ PIXEL16 = | | ; /* Red 5 бит, Green 6 бит, Blue 5 бит */ } else if { /* Red color */ red = * * + t * * + t * u * + * u * ; /* Green color */ green = * * & 0x3f) + t * * & 0x3f) + t * u * & 0x3f) + * u * & 0x3f); /* Blue color */ blue = * * + t * * + t * u * + * u * ; /* Full pixel from R G B */ PIXEL16 = | | ; } else if { /* Red color */ red = * * + t * * + t * u * + * u * ; /* Green color */ green = * * & 0xff) + t * * & 0xff) + t * u * & 0xff) + * u * & 0xff); /* Blue color */ blue = * * + t * * + t * u * + * u * ; /* Full pixel from R G B */ PIXEL32 = | | ; } else { printf не поддерживается\n", depth); return -1; } } } return 0; } Просмотров: 12698
|