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

Ваш аккаунт

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

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

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

как реализовать функцию загрузки изображения с помощью void load()

86K
12 декабря 2012 года
unix-91
4 / / 11.12.2012
Доброго времени суток !
люди у меня есть клас Picture :

class Picture{
int* picture;
int mx;
int my;
public:
Picture();
int *getPicture();
void setPicture(int *picture)
int getMx();
int getMy();
void setColor(int x, int y, int color);
void load();
int getMaxColor();


}

int* Picture::getPicture(){
return (1, 0, 1, 1); //заглушка
}

void Picture::setPicture(int *picture){
this.picture = picture;
}

int Picture::getMx(){
return this.mx;
}

int Picture::getMy(){
return this.my;
}


void Picture::setColor(int x, int y, int color){
for(int i=0; i < this.mx; i++)
for(int j=0; j< this.my; j++){
if (i==x && j==y){
this.picture[i*this.mx + j] = color;
break;
}
}
}

int Picture::getMaxColor(){
int maxColor = 0;
for(int i=0; i < this.Mx; i++)
for(int j=0; j< this.My; j++){
if (this.picture[i+j] > maxColor){
maxColor = this.picture[i+j];
}
}
}

void Picture::load(){
// подскажите что дальше прописывать в этой функции

заранее благодарю !

подумал наверное стоит по подробней описать для чего нужна программма :
Суть программы заключается в том что изначально мы добавляем картинку в базу данных (база организована с помощью map) далее после загрузки картинок мы, используя метод "Сравнение картинки по гистограмме " сравниваем нашу картинку из документа с той что уже в базе и если они совпадают то значит все верно ( истина ) .сам клас метода сранения по гистограмме выглядит в следующем виде :
class Hist{
float hist[10]; //гистограмма
int pixCount; //число пикселей в картинке
public:
Hist();
void createHist(Picture *p); //Получение гистограммы
void normalize(); //Нормализация гистограммы
float at(int i); //Найти i-ый элемент гистограммы
bool compare(Hist *p); //Сравнение гистограммы
int getSize(); //Получить размер
int getHist()
}

char Hist::getHist(){
return this.hist;

void Hist::createHist(Picture *pic){
int maxColor = pic.getMaxColor();
float step = maxColor/10 ;
for(int i=0; i < pic.getMx(); i++)
for(int j=0; j< pic.getMy(); j++){
float levelColor = step;
int k = 0; while( levelColor < maxColor ){
if ( pic.getPicture[i*pic.getMx()+j] < levelColor){ this.hist[k]++; k++;
break;
}
levelColor += step;
}
}
this.pixCount = pic.getMx() * pic.getMy();

void Hist::normalize(){
for(int i=0; i < 10 ;i++)
this.hist = this.hist/pixCount;
}


bool Hist::compare(Hist *p){
for(int i=0; i<10; i++){
if (this.hist != p.at(i))
return false;
}
return true;
}

ну и непосредственно реализация в main
#include<picture.h>
#include<hist.h>
#include<iostream>
#include<list>
using namespace std;

void main(){

Picture pic = Picture(); //заглушка на загрузку картинки
Picture pic1 = Picture();
Picture pic2 = Picture();
Picture pic3 = Picture();

vector<Picture> picList; //заглушка на загрузку документа
picList.push_back(pic1);
picList.push_back(pic2);
picList.push_back(pic3);

Hist hist = Hist();
hist.createHist(pic);
hist.normalize();

vector<Picture>::iterator iter;
iter = picList.begin();
while (iter != picList.end()) {
Hist hist1 = Hist();
hist1.createHist((*iter))
hist1.normalize();
if ( hist.compare(hist1) ){
cout << "Картинка найдена" << endl;
}
++iter;
}
}
как то так .

если кто вкурсе какие модульные тесты можно сдделать для класса Picture - "работа с изображением" то не стесняйтесь предлагайте =)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

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