Урок 4: Простейшие способы обработки изображений, глава 2

Итак, мы установили все необходимое (в первой части четвертого урока). Переходим собственно к программированию. Перед вами вторая часть урока 4. Если вы пропустили первую часть данного учебного материала, то вы должны вернуться и ознакомится с ней.

Для того чтобы запустить программу, загрузите данный файл и извлеките его в папку с вашими проектами, если вы используете MinPSPW и Eclipse (или другую IDE), или в новую папку вашего ~/ каталога, если вы используете CYGWIN и PSP Toolchain. О чем же я вам говорю? Вы не знаете, что является ~/ каталогом? Ничего страшного! Если у вас нет опыта работы с *nix, то сейчас дам некоторые пояснения. Как правило, ~ / синонимичен с корневым каталогом пользователя на *nix системе. Так, ~/ – то же самое, что и C:/cygwin/home/yourUserName. Сейчас создаем каталог и извлекаем файлы, которые вы только что загрузили в ту папку.

Далее открываем свой редактор и создаем новый исходный файл С. Называем его «main.c» и сохраняем в папку, которую вы создавали. С этого момента я буду именовать данную папку, как папку вашей программы, в целях удобства. Далее вставляем стандартный комментарий в заголовок вашего нового файла, в котором будут обозначены цель программы, ваше имя и дата. Этот шаг является дополнительным, но станет для вас хорошей практикой.

/*
My Image Display Program
Author: Brad Dwyer
Date: 12/28/2005

Спасибо Psilocybeing за программу.
*/

Пока все просто, не так ли? Далее добавим заголовочные файлы. Если вспомнить урок 2, то заголовочные файлы позволяли нам использовать предварительно написанные внешние функции, а также типы данных без обязательного включения кода, необходимого для работы. Программируя изображения ИБП, нам следует задействовать довольно много файлов:


#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <png.h>
#include <stdio.h>
#include "graphics.h"

Таким образом, у нас есть стандартные файлы pspdisplay.h, pspkernel.h и pspdebug.h. Также мы имеем pspctrl.h файл, благодаря которому возможно чтение ввода ключей PSP (вы должны помнить это из урока 3). После этого идут три файла, которые, вероятно, покажутся вам незнакомыми. Первый, pspgu.h, позволяет нам получить доступ к аппаратному ускорению. Больше мы не будем применять ни одной функции из данного файла, кроме graphics.h (о которой мы расскажем чуть позже). Второй, png.h, дает нам возможность управлять изображениями с форматом PNG. И третий, stdio.h, открывает нам доступ к стандартным функциям С (Си), которые мы будем использовать в своих интересах. В частности, нам понадобится sprintf () для интерпретации строк. И вот он результат, который имеет некоторые особенности. Вместо знаков больше меньше здесь используются кавычки. Эти кавычки показывают, что все берется не из каталога компилятора, а из папки программы. Указанный ранее файл, graphics.h, содержит ряд функций, которые облегчат нашу задачу. Включенные в него действительные функции, необходимы нам для загрузки и вывода на экран нашего изображения.

Теперь вставим операторы #define. С первым из них вы уже должны быть знакомы, а второй, вероятно, удивит вас:

#define printf pspDebugScreenPrintf
#define MAX(X, Y) ((X) > (Y)? (X): (Y))

Фактически второй оператор #define определяет функцию, но это действие представлено в сокращенной форме. Такой вид описания носит название «Макрофункция». Она принимает параметры X и Y. После этого управление ими осуществляется через функцию, которая основана на операторе if. Данная функция возвращает значение Х, если Х больше Y, и возвращает Y, если Х меньше Y. Синтаксическая структура макрофункции представляет собой следующее: «NAME (TEST? TRUE: FALSE) «, где NAME – идентификатор, TEST – эквивалент того, что находилось бы в круглой скобке оператора if, TRUE – необходимо для возвращения в случае истинного результата TEST, FALSE – если результат ложный. Все это равнозначно следующей функции:

//Это пример; не добавляйте в свою программу
int MAX(int X, int Y) { if(X > Y) {return X;} else { return Y;}}

Если вы будете разбирать исходные коды программ, написанных другими людьми, то, вероятно, встретитесь с некоторыми аббревиатурами. Поэтому важно понять, как все это работает. Или, по крайней мере, понять, что каждая из них делает. Преимуществом использования данного синтаксиса посредством структуры if / else является то, что компилятор сможет чаще оптимизировать код, приводя к более быстрому выполнению программы. Наверное, это не существенно для многих программ, за исключением тех, в которых делается акцент на повышении работоспособности.

Завершаем вторую часть из урока 4 и двигаемся дальше, как вы уже поняли, к третьей части данного урока.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: