000
13.05.2004, 21:20 Uhr
Tommi Bisic
|
Hallo Leute! Ich war schon lange nicht mehr hier aber das neue Semester hat angefangen und... naja...ihr wisst schon Ich habe ein Problem mit ein Paar Schleifen die ich nicht verstehe. Es geht um ein Programm dass Bilder in negatíve oder schwarz-weisse umwandeln kann.Zusätzlich kommt so ein Weich Zeichner -Effekt zum Einsatz Das Programm sieht wie folgt aus;
C++: |
#include <iostream.h> #include <fstream.h> #define ZEILE 480 #define SPALTE 640 void negativ(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]); void schwarz(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]); void filter(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]); int main() { fstream File; char FileName[40],c; int Zeile, Spalte; unsigned char ucInBuffer[SPALTE][ZEILE]; unsigned char ucOutBuffer[SPALTE][ZEILE]; cout<<"Bitte Dateiname angeben: "; cin>>FileName; File.open(FileName,ios::in|ios::binary|ios::nocreate,0); //if (File.fail()) if (!File) { cout<<"open Error"<<FileName<<endl; return 1; } for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) File.read(&ucInBuffer[Spalte][Zeile],1); } File.close(); label: cout<<"n-negativ\ns-schwarz-weiss\nf-filter\nAuswahl:"; cin>>c; switch(c) { case 'n': negativ(ucInBuffer, ucOutBuffer); break; case 's': schwarz(ucInBuffer, ucOutBuffer); break; case 'f': filter(ucInBuffer, ucOutBuffer); break; default: cout<<"Fehler"; goto label; } cout<<"Bitte Dateiname angeben: "; cin>>FileName; File.open(FileName,ios::out|ios::binary,0); if (File.fail()) { cout<<"open Error"<<FileName<<endl; return 1; } for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) File.write(&ucOutBuffer[Spalte][Zeile],1); } File.close(); return 0; } void negativ(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]) 1 { int Zeile, Spalte; for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) ucOut[Spalte][Zeile]=255-ucIn[Spalte][Zeile]; } } void schwarz(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]) { int Zeile, Spalte; for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) { if(ucIn[Spalte][Zeile]>128) ucOut[Spalte][Zeile]=255; else ucOut[Spalte][Zeile]=0; } } } void filter(unsigned char ucIn[SPALTE][ZEILE], unsigned char ucOut[SPALTE][ZEILE]) { #define FILTERLAENGE 15 #define ZEILENLAENGE 640 int Zeile, Spalte; int iSumme, k, j; unsigned char ucZeile[ZEILENLAENGE]; unsigned char ucZeileGefiltert[ZEILENLAENGE]; for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) { ucZeile[Spalte]=ucIn[Spalte][Zeile]; } //Filtern for(k=0;k<(ZEILENLAENGE-FILTERLAENGE);k++) { iSumme=0; for(j=0;j<FILTERLAENGE;j++) iSumme=iSumme+ucZeile[k+j]; ucZeileGefiltert[k]=iSumme/FILTERLAENGE; } //Zeile auffuellen for(k=(ZEILENLAENGE-FILTERLAENGE);k<ZEILENLAENGE;k++) { ucZeileGefiltert[k]=0; } for(Spalte=0;Spalte<SPALTE;Spalte++) { ucOut[Spalte][Zeile]=ucZeileGefiltert[Spalte]; } } }
|
Dabei verstehe ich vor allem diesen Teil, also diese Schleifen um genau zu sein, nicht:
C++: |
for(Zeile=0;Zeile<ZEILE;Zeile++) { for(Spalte=0;Spalte<SPALTE;Spalte++) { ucZeile[Spalte]=ucIn[Spalte][Zeile]; } //Filtern for(k=0;k<(ZEILENLAENGE-FILTERLAENGE);k++) { iSumme=0; for(j=0;j<FILTERLAENGE;j++) iSumme=iSumme+ucZeile[k+j]; ucZeileGefiltert[k]=iSumme/FILTERLAENGE; } //Zeile auffuellen for(k=(ZEILENLAENGE-FILTERLAENGE);k<ZEILENLAENGE;k++) { ucZeileGefiltert[k]=0; } for(Spalte=0;Spalte<SPALTE;Spalte++) { ucOut[Spalte][Zeile]=ucZeileGefiltert[Spalte]; } }
|
Wäre für eure Hilfe sehr dankbar
Bearbeitung von Pablo: |
Mit emacs eingerückt. So sieht es besser aus
|
Dieser Post wurde am 13.05.2004 um 22:58 Uhr von Pablo editiert. |