- •Урок 1: Создание среды программирования, глава 1
- •Урок 1: Создание среды программирования, глава 2
- •Урок 1: Создание среды программирования, глава 3
- •Урок 1: Создание среды программирования, глава 4
- •Урок 1: Создание среды программирования, глава 5
- •Урок 2: Создание первой собственной программы, глава 1
- •Урок 2: Создание первой собственной программы, глава 2
- •Урок 2: Создание первой собственной программы, глава 3
- •Урок 3: Шпаргалки для начинающих программистов, глава 1
- •Урок 3: Шпаргалки для начинающих программистов, глава 2
- •Урок 3: Шпаргалки для начинающих программистов, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 1
- •Урок 4: Простейшие способы обработки изображений, глава 2
- •Урок 4: Простейшие способы обработки изображений, глава 3
- •Урок 4: Простейшие способы обработки изображений, глава 4
- •Урок 4: Простейшие способы обработки изображений, глава 5
- •Урок 5: Новые методы программирования на psp, глава 1
- •Урок 5: Новые методы программирования на psp, глава 2
- •Урок 5: Новые методы программирования на psp, глава 3
- •Урок 5: Новые методы программирования на psp, глава 4
- •Урок 5: Новые методы программирования на psp, глава 5
- •Урок 6: Добавление звука в программу, глава 1
- •Урок 6: Добавление звука в программу, глава 2
- •Урок 6: Добавление звука в программу, глава 3
- •Считывание всего файла, глава 1
- •Считывание всего файла, глава 2
- •Считывание всего файла, глава 3
- •Считывание всего файла, глава 4
- •Считывание всего файла, глава 5
Урок 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 и двигаемся дальше, как вы уже поняли, к третьей части данного урока.
