#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;
}
}
}
Поворот изображения
Среда разработки - MS VisualStudio NET.
Цитата: АКМ
Есть графический файл формата PGM. Надо повернуть его на заданный угол. Центр поворота - центр изображения.
Среда разработки - MS VisualStudio NET.
Среда разработки - MS VisualStudio NET.
Ищи графическую либу с поддержкой твоего дикого формата.
Например http://www.cg.tuwien.ac.at/~knapp/graphix_old/gxframe.html
так проблема в формате или в повороте? :)
проблема в руках :) не могу реализовать, хотя логика вроде понятна. С самим форматом все просто. Вот код, который позволяет считать значения яркостей пикселов в матрицу,
Коль матрица есть, то осталось вспомнить кое что из курса аналитической геометрии:
ПС. а, ну по ссылке MrLinker все расписано