как реализовать функцию загрузки изображения с помощью void load()
люди у меня есть клас 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 - "работа с изображением" то не стесняйтесь предлагайте =)