Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011





НазваниеСписок основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011
страница10/13
Дата публикации24.02.2015
Размер0.54 Mb.
ТипОтчет
100-bal.ru > Право > Отчет
1   ...   5   6   7   8   9   10   11   12   13

4.1Реализация представления изображения в оперативной памяти


Представление изображения в оперативной памяти реализовано с помощью класса Image:

  1. #include



  2. class Image

  3. {

  4. public:

  5. Image(int width, int height, quint16* buf) :

  6. m_width(width),

  7. m_height(height)

  8. {

  9. if (buf == NULL)

  10. {

  11. buf = new quint16[m_width * m_height];

  12. }

  13. m_dataPointer = QSharedPointer<quint16>(buf, clearImg);

  14. }



  15. ~Image()

  16. {

  17. }



  18. int getWidth() const { return m_width; }

  19. int getHeight() const { return m_height; }

  20. int getSize() const { return m_width * m_height; }

  21. int getSizeInBytes() const

  22. {

  23. return getSize() * sizeof(quint16);

  24. }



  25. quint16 getPixel(int x, int y) const

  26. {

  27. return pixels()[y * m_width + x];

  28. }



  29. void setPixel(int x, int y, quint16 val)

  30. {

  31. pixels()[y * m_width + x] = val;

  32. }



  33. const quint16* pixels() const {return m_dataPointer.data();}

  34. quint16* pixels() { return m_dataPointer.data(); }



  35. const quint16* scanLine(int row) const

  36. {

  37. return pixels() + row * getWidth();

  38. }



  39. private:

  40. static void clearImg(quint16* pData)

  41. {

  42. delete[] pData;

  43. }



  44. QSharedPointer < quint16 > m_dataPointer;

  45. int m_width;

  46. int m_height;

  47. };

В приведённой реализации предполагается, что для хранения интенсивности одного пикселя требуется 16 бит. Изображение представляется линейным массивом двухбайтных элементов, указатель на первый элемент которого хранится в поле m_dataPointer; для хранения размеров изображения используются поля m_width и m_height. При этом для хранения указателя на массив пикселей используется специальный класс QSharedPointer [19]. Это сделано для обеспечения автоматического освобождения выделенной для хранения изображения памяти в момент уничтожения экземпляра класса Image. Кроме того, QSharedPointer осуществляет подсчёт ссылок, что позволяет избежать проблемы «висячих» указателей при копировании экземпляров Image.

Интерфейс класса Image предоставляет различные варианты доступа к элементам изображения:

  • методы getPixel и setPixel позволяют соответственно читать и изменять цвет заданного пикселя;

  • метод pixels возвращает указатель, по которому можно обратиться ко всем пикселям изображения;

  • метод scanLine возвращает указатель на первый пиксель заданной строки.

Существуют две перегрузки метода pixels: константная (строка 39) и неконстантная (строка 40). Первая используется в операциях чтения, вторая – в операциях записи. Рассмотрим, как данная реализация выполняет требования к эффективности операций обращения к элементам изображения (пункт 1.5.1). Как было сказано выше, чтение интенсивности пикселя по заданным координатам осуществляет метод getPixel (строки 29-32). Из его реализации видно, что сначала вычисляется позиция в линейном массиве пикселей, соответствующая переданным координатам. В рассматриваемой реализации предполагается, что изображение хранится в памяти построчно, поэтому искомая позиция равна абсциссе, к которой прибавлена ордината, умноженная на ширину строки изображения (строка 31). После вычисления позиции из функции возвращается соответствующее 16-битное значение линейного массива пикселей. Данная реализация, очевидно, имеет асимптотику O(1).

Метод setPixel (строки 34-37) реализован аналогично, и, следовательно, также удовлетворяет требованиям к эффективности. Более того, оба рассматриваемых метода определены в объявлении класса Image, и, следовательно, в соответствии с правилами языка C++, являются встраиваемыми. То есть при обращении к ним не будет осуществляться вызов функции, что повышает скорость их выполнения.

Недостатком методов getPixel и setPixel является то, что при каждом обращении к пикселю осуществляется одно умножение, одно сложение и одна операция индексации массива. Эта реализация является неэффективной при необходимости последовательного обращения ко всем пикселям изображения. Именно чтобы преодолеть этот недостаток, методы pixels сделаны открытыми. Последовательная обработка всех пикселей может осуществляться следующим образом:

  1. void processAllPixels(Image& img) {

  2. for (quint16* p = img.pixels() + img.getSize(); p != img.pixels(); --p)

  3. processPixel(*p); // Обработка очередного пикселя

  4. }

В приведённой реализации для обращения к очередному пикселю изображения осуществляется только операция разыменования указателя. Метод getSize класса Image возвращает размер изображения в соответствии с определением, приведённым в подразделе 1.1 отчёта по первому этапу проекта, а именно количество пикселей, из которых состоит изображение.

Таким образом, можно сделать вывод, что разработанная реализация представления полутонового изображения в оперативной памяти компьютера удовлетворяет предъявляемым к ней требованиям.
1   ...   5   6   7   8   9   10   11   12   13

Похожие:

Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconСписок основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011
Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 на выполнение поисковых научно-исследовательских работ для государственных...
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconСписок основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011
Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 на выполнение поисковых научно-исследовательских работ для государственных...
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет о выполненной работе по Государственному контракту №14. 741....
Государственное образовательное учреждение высшего профессионального образования "Российский экономический университет им. Г. В....
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет о научно-исследовательской работе по Государственному контракту...
Этап второй: «Выбор направлений исследований и этап предварительных исследований по мембранным коллоидным системам»
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет по Дополнительному соглашению №2 к Государственному контракту...
«Разработка проекта скиово бассейна реки Нарва и рек бассейна Псковско-Чудского озера» (С-10-01)
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет о научно-исследовательской работе, выполняемой по государственному...
«Разработка алгоритмов для биоинформационного анализа комплексных метаболических и молекулярно-генетических сетей»
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет о научно-исследовательской работе по государственному контракту...
Русский язык и культура речи: учебно-методический комплекс для студентов очной формы обучения / сост. И. А. Крым; Кузбасский институт...
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет о выполнении 4 этапа Государственного контракта №14. 740. 11....
О выполнении 4 этапа Государственного контракта №14. 740. 11. 1071 от 24. 05. 2011 г
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет по Дополнительному соглашению №4 от 27 февраля 2010 г к Государственному...

Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчетные материалы по гос контракту №02. 740. 11. 0072 в рамках федеральной...
Учебно-методический комплекс по дисциплине «Биохимия молока и мяса» составлен на основе
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет по Государственному контракту №
«Разработка концепции создания интеллектуальной транспортной системы на автомобильных дорогах федерального значения»
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет по Государственному контракту на выполнение работ для государственных нужд
Организационно-техническое обеспечение работы российской экспозиции на осенней технической ярмарке
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconОтчет по государственному контракту от 04. 06. 2012 №1102-01-41/06-12...
...
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconРеферат отчета по государственному контракту от 20. 04. 2007 г. №8-07-Эко...
Фгун екатеринбургский медицинский научный центр профилактики и охраны здоровья рабочих
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconСписок исполнителей
Содержание деятельности и результаты Мероприятия №10 «Москва – город грамотных людей»
Список основных исполнителей по Государственному контракту 14. 740. 11. 1258 от 17 июня 2011 iconСписок исполнителей
Федеральное государственное бюджетное учреждение науки институт программных систем им. А. К. Айламазяна


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск