Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поворот изображения

3.9K
29 августа 2007 года
АКМ
49 / / 07.06.2005
Есть графический файл формата PGM. Надо повернуть его на заданный угол. Центр поворота - центр изображения.
Среда разработки - MS VisualStudio NET.
398
29 августа 2007 года
Alexandoros
630 / / 21.10.2005
Цитата: АКМ
Есть графический файл формата PGM. Надо повернуть его на заданный угол. Центр поворота - центр изображения.
Среда разработки - MS VisualStudio NET.




Ищи графическую либу с поддержкой твоего дикого формата.
Например http://www.cg.tuwien.ac.at/~knapp/graphix_old/gxframe.html

355
29 августа 2007 года
<SCORP>
786 / / 21.10.2006
так проблема в формате или в повороте? :)
3.9K
29 августа 2007 года
АКМ
49 / / 07.06.2005
проблема в руках :) не могу реализовать, хотя логика вроде понятна. С самим форматом все просто. Вот код, который позволяет считать значения яркостей пикселов в матрицу,
не могу приспособить какой-нибудь алгогритм поворота
Код:
#include "stdlib.h"
#include "stdio.h"
#define MAX_STR_LEN 256

struct pgm_file
{
       char ID[MAX_STR_LEN];
       char comment[MAX_STR_LEN];
       unsigned int  width;
       unsigned int  height;
       unsigned int  gradient;
       unsigned int  ** data;
};


int main()
{
    int ret=-1;
    unsigned int i,j;
    pgm_file pgm;
    FILE * ifile;
    ifile = fopen("data.png","r");
    if (!ifile)
       {
        printf("Can`t open input file\n");
        return -1;
       };
    fgets(pgm.ID , MAX_STR_LEN, ifile);
    fgets(pgm.comment , MAX_STR_LEN, ifile);
    if (pgm.comment[0] != '#')
       ret = sscanf(pgm.comment,"%d %d",&pgm.width,&pgm.height);
    else
       ret = fscanf(ifile,"%d %d",&pgm.width,&pgm.height);
    if ( ret != 2 || feof(ifile) )
       {
        printf("Input data error (width|height) \n");
        return -1;
       };
    ret = fscanf(ifile,"%d",&pgm.gradient);
    if ( ret != 1 || feof(ifile) )
       {
        printf("Input data error (gradient) \n");
        return -1;
       };
    pgm.data = (unsigned int **)malloc(sizeof(unsigned int*)*pgm.height);
    for (i = 0; i < pgm.height; ++i)
        pgm.data = (unsigned int *)malloc(sizeof(unsigned int)*pgm.width);
   
    for (i = 0; i < pgm.height; ++i)    
        for (j = 0; j < pgm.width; ++j)
            {
                 ret = fscanf(ifile,"%d", &(pgm.data[j]));
                 if ((ret != 1 || feof(ifile)))
                    {
                         printf("Input data error (data[%d,%d]) \n",i,j);
                         return -1;
                    }
            }
}
563
30 августа 2007 года
MrLinker
249 / / 17.09.2006
Коль матрица есть, то осталось вспомнить кое что из курса аналитической геометрии:

http://www.pm298.ru/dekart.shtml
398
01 сентября 2007 года
Alexandoros
630 / / 21.10.2005
Ну на вскидку - вычисляеш полярные координаты точки, добавляеш к углу угол поворота, переводиш назад в декартовые, выводиш на экран. Повторить для всех точек.

ПС. а, ну по ссылке MrLinker все расписано
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог