Hele tak já sem hodím co chci udělat, protože se v tom vrtám a stále to hází spoustu chyb. Tak chci nejdříve zpracovat první argument, ale ten není třeba zpracovávat v cyklu, protože v C++ je funkce, která mi vrátí pracovní cestu, jenže ta funkce mi nejde spustit, protože to po mě chce konstantnu PATH_MAX, která ovšem není definovaná a ani includování stdio.h mi nepomohlo. Nevím jaký používáš systém, já mám Win XP, Visual Studio C++ Express a používám Unicode.
Vysvětlím k čemu má být program. Chci hledat barvy v obrazu podle přesně zadaných kritérií HSB/HSV a na základě toho vygenerovat obraz nebo obrazy. Teď tedy řeším to zpracování argumentů a přípravu dat podle kterých budu porovnávat. Zadám nejdříve jméno hlavního zdrojového souboru ve kterém budu hledat barvy (argument 1). Pak zadám jméno cílového souboru (argument 2). Následovat můžou buďto barvy, respektive podmínky pro hledání a náhradu oddělené mezerou to jsou ty argumenty které nezačínají pomlčkou, nebo specifikace dalšího zdroje pomocí argumentu -sčíslo a dalšího cíle pomocí argumentu -dčíslo .
Co se týče zpracování argumentů - během ladění chci nejdříve testovat tyto argumenty:
...cesta\program.exe inputfile.png destfile.png (12,14,35)-(13,16,42)-0000FF (102,104,55)-(103,106,65)-00FFFF
( To v závorkách a mimo ně jsou jakože barvy).
#include "stdafx.h"
#include <vector>
#include <string>
#include <iostream>
// #include <stdio.h> /* NO!: defines FILENAME_MAX */
#include <direct.h>
#include <conio.h>
using namespace std;
char cCurrentPath[FILENAME_MAX];
class MojeTrida
{
private:
int *Cesta; // pracovní cesta
public:
MojeTrida(); // Konstruktor
~MojeTrida();
};
int _tmain(int argc, _TCHAR* argv[])
{
_TCHAR *a;
cCurrentPath = _getcwd( NULL, 0);
for(int i = 0; i < argc; i++)
{
a = argv[i];
if ( i ==1 )
source[1]
}
_getch();
return 0;
}
Rád bych ty hodnoty z argumentů ukládal do členů třídy. Takže jsem si založil třídu MojeTrida ve které by mělo být vše zabalené, abych to bylo přehlednější. Moje představa by byla takováto. Hlavními členy třídy by měly být:
- source: (objekt může obsahovat více zdrojů a každý zdroj bude obsahovat několik barev podle účelu použití).
source.count - int kolik zdrojů je uloženo
source.src - pole s objekty zdrojů např. pod source.src[0] by byl objekt který bude obsahovat minimální a maximální hodnoty RGB.
ale nevím jestli v c++ je možné přistupovat k objektům takto? source.src[0].min.h a source.src[0].max.h ?
source.bmp ... tady si pak budu ukládat data týkající se zdrojových bitmap
- target:(objekt může obsahovat více cílů a každý cíl je prostě jméno souboru).
target.count - počet cílových souborů
target.dest - konkrétní data týkající se těch rozpracovaných souborů
Další obdoba příkazu:
...cesta\program.exe inputfile.png destfile.png (12,14,35)-(13,16,42)-0000FF (102,104,55)-(103,106,65)-00FFFF -s photo1.jpg (15,25,65)-(17,35,95)-DDFF00
inputfile.png patří do source.src[0]
destfile.png patří do target.dest[0]
argumenty (12,14,35)-(13,16,42)-0000FF
bych potřeboval rozparsovat a uložit do
source.src[0] .. jako první trojici dat
(102,104,55)-(103,106,65)-00FFFF
a
(102,104,55)-(103,106,65)-00FFFF .. jako druhou trojici dat. Tyto barvy říkají v jakém rozsahu hledám barvu a za jakou barvu ji chci zaměnit.
Sice asi v praxi budu pracovat max. se dvěma zdrojovými soubory, ale těch výstupních souborů by mohlo být více, podle toho kolik masek budu chtít vytvořit.