Интернет магазин китайских планшетных компьютеров



Компьютеры - Билинейная интерполяция - Пример программы

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;
}


Просмотров: 12064


<<< Алгоритмы построения отрезка
Графический метод решения задачи линейного программирования >>>