Zum Inhalt springen

idefix

Mitglieder
  • Gesamte Inhalte

    44
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von idefix

  1. Sorry, ich habe die Microsoft Implemation benutzt. Warum #include <fstream> und #include <fstream.h> gibt ist mir nicht ganz klar. Auf jeden fall ist <fstream> von der STL und <fstream.h> Microsoft spezifisch und ohne namespace (verträgt sich nicht mit der STL) also den Include auf #include <fstream> ändern #include <iostream> (für cout ) und using namespace std; Hinzufügen und InputFile.open(pszFile,ios::in, filebuf::text); in InputFile.open(pszFile,ios::in); ändern sollte dann wieder laufen
  2. GetSystemInfo, SystemParametersInfo Vieleicht hilft's. Ist nicht immer ganz klar erkennbar welche Info wie zusammenhängt In der MSDN gibt's bei GetSystemInfo ein kleines Beispiel
  3. Also ich habe das Ganze einbißchen aufgeteilt case WM_CREATE: //Laden aus der Resource g_OrgBitmap[0] =LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)); g_OrgBitmap[1] =LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP2)); //Monochrome Bitmap erstellen, mit der Maskierungsfarbe g_MaskBitmap[0] =BitmapMask(g_OrgBitmap[0],RGB(255,255,255)); g_MaskBitmap[1] =BitmapMask(g_OrgBitmap[1],RGB(255,0,255)); //Neue Bitmap erstellen wobei die Bitmask schwarz ist g_ResBitmap[0] =MaskBitmap(g_OrgBitmap[0],g_MaskBitmap[0]); g_ResBitmap[1] =MaskBitmap(g_OrgBitmap[1],g_MaskBitmap[1]); case WM_PAINT: for(int i=0;i<BITMAPSIZE;i++) { //Original zeichen DrawBitmap(hdc,g_OrgBitmap,10+i*200,10,48,48); DrawBitmap(hdc,g_OrgBitmap,70+i*200,10,64,64); //Mono Maskbitmap zeichen DrawBitmap(hdc,g_MaskBitmap,10+i*200,80,48,48); DrawBitmap(hdc,g_MaskBitmap,70+i*200,80,64,64); //Color Maskbitmap zeichen DrawBitmap(hdc,g_ResBitmap,10+i*200,160,48,48); DrawBitmap(hdc,g_ResBitmap,70+i*200,160,64,64); //Naja, Bitmap Transparent zeichnen DrawBitmapTransparent(hdc,g_ResBitmap,g_MaskBitmap,10+i*200,240,48,48); DrawBitmapTransparent(hdc,g_ResBitmap,g_MaskBitmap,70+i*200,240,64,64); } /////////////////////////////////////////////////////////////////// void DrawBitmap(HDC hdc,HBITMAP hBitmap,int x,int y,int cx,int cy) { HDC hdcMem; BITMAP bm; GetObject(hBitmap,sizeof(bm),&bm); hdcMem= CreateCompatibleDC(hdc); SelectObject(hdcMem,hBitmap); StretchBlt(hdc,x,y,cx,cy,hdcMem,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); DeleteDC(hdcMem); } /////////////////////////////////////////////////////////////////// void DrawBitmapTransparent(HDC hdc,HBITMAP hBitmap,HBITMAP hMaskBitmap,int x,int y,int cx,int cy) { HDC hdcMem; HDC hdcMask; BITMAP bm; GetObject(hBitmap,sizeof(bm),&bm); hdcMem=CreateCompatibleDC(hdc); SelectObject(hdcMem,hBitmap); hdcMask=CreateCompatibleDC(hdc); SelectObject(hdcMask,hMaskBitmap); // 0x220326 >> MSDN suchen nach Ternary Raster Operations // Die Table enthält alle ROP Werte die nicht mit Defines definiert sind // Kopiere alle Pixel die nicht schwarz sind und invertiere diese zu schwarz StretchBlt(hdc,x,y,cx,cy,hdcMask,0,0,bm.bmWidth,bm.bmHeight,0x220326);//D & ~S //Da zeichnen wo schwarz ist StretchBlt(hdc,x,y,cx,cy,hdcMem,0,0,bm.bmWidth,bm.bmHeight,SRCPAINT);// S|D DeleteDC(hdcMem); DeleteDC(hdcMask); } /////////////////////////////////////////////////////////////////// // Monochrome Bitmap erstellen HBITMAP BitmapMask(HBITMAP hBitmap,COLORREF Color) { HDC hdcMem; HDC hdcMask; BITMAP bm; HBITMAP hBitmapMask; GetObject(hBitmap,sizeof(bm),&bm); hdcMem=CreateCompatibleDC(NULL); SelectObject(hdcMem,hBitmap); hBitmapMask=CreateBitmap(bm.bmWidth,bm.bmHeight,1,1,NULL); hdcMask=CreateCompatibleDC(NULL); SelectObject(hdcMask,hBitmapMask); //Der eigentliche Trick Hintergrundfarbe als Maske benutzen // habe ich im Petzold gefunden war mir neu SetBkColor(hdcMem,Color); BitBlt(hdcMask,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,NOTSRCCOPY); DeleteDC(hdcMem); DeleteDC(hdcMask); return hBitmapMask; } /////////////////////////////////////////////////////////////////// // Original Maskierungsfarbe durch schwarz ersetzen HBITMAP MaskBitmap(HBITMAP hBitmap,HBITMAP hMaskBitmap) { HDC hdcMem; HDC hdcMask; BITMAP bm; HBITMAP hBitmapMask; GetObject(hBitmap,sizeof(bm),&bm); hdcMem=CreateCompatibleDC(NULL); hdcMask=CreateCompatibleDC(NULL); hBitmapMask= CreateBitmap(bm.bmWidth,bm.bmHeight,bm.bmPlanes,bm.bmBitsPixel,NULL); SelectObject(hdcMask,hBitmapMask); //Maske kopieren SelectObject(hdcMem,hMaskBitmap); BitBlt(hdcMask,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCCOPY); //Rest kopieren bis auf die Maskierung SelectObject(hdcMem,hBitmap); BitBlt(hdcMask,0,0,bm.bmWidth,bm.bmHeight,hdcMem,0,0,SRCAND); DeleteDC(hdcMem); DeleteDC(hdcMask); return hBitmapMask; } Es läßt sich mit sicherheit einiges zusammenfassen aber nun kann man die Entwicklung genau mit verfolgen ich kann dir auch das ganze Projekt zusenden. Ich weiß nur nicht wie Ansonsten viel Spaß weiterhin
  4. Brauchst du noch Hilfe? Ich habe noch mal in Beispielen gefroscht und etwas lauffähiges zusammen kopiert. Das Thema hat mich selber mal ziemlich beschäftig
  5. Äh, nicht wo das steht sonder wo die Koor sind bzw. wessen?
  6. wo ist denn GetPixel(dcSrc,x,y); dcSrc=GetDC("hwndAppWin") also linke ober Ecke vom Window oder sehe ich das falsch? Ist da auch dcDes? oder sollte es besser GetPixel(dcSrcWork,x,y); lauten?
  7. Also Org bitmap sei 0,0,32,32 24 bit Farbtiefe (bei dir PictureSize ) Destination Size sei 0,0,64,64 (bei dir nObjectWidth, nObjectHeight) hBitmapMask ist monochrom und 0,0,32,32 1bit farbtiefe (korrekt?) bm wird dann 0,0,32,32 sein dcSrcWork wird nicht weiter benutzt SelectObject(dcSrcWork, m_hBitmap); warum? sehe nicht wofür dcDestWork hier wird hBitmapMask selectiert hBrush ist schwarz dann werden die Pixel die nicht mit clrKey über einstimmen schwarz gesetzt. (waren sie vorher weiß? wahrscheinlich) dcWork ist mit hBitmapMask verheiratet (wie dcDestWork) sterchtblt(dcDest // bildschirm ziel irgendwo koor (0,0) größe 64,64 dcWork//hBitmapMask koor (0,0),größe (32,32)? wenn Picture size gleich m_hBitmap bzw hBitmap in worten: du kopierts und größerst eine s/w Bitmap in eine destination region bei der die größe nicht oder zufällig gewollt aber nicht garantiert anders ist als die org. Bitmap. äh Okay, angenommen bunter Adler auf weißen hintergund clrKey=weiß; Ergebnis schwarzer Adler auf weißen Grund oder? wenn clrkey=grün Ergebnis schwarzer Adler auf schwarzen Grund wenn bunt kein grün enthält enthält bunt grün kann Strechtblt bei Verkleinerung alles schwarz machen.
  8. Koordinaten (sind eh immer Null) Ich wollte mal gerade das ausprobieren, was ich so schlaues von mir gegeben habe. CopyImage(....,LR_MONOCHROME) bedeutet doch schwarz/weiß welche Farbe sollst den nun sein? In dem beispiel sind die Bitmaps MONOCHROME
  9. Blödsinn, na klar wird es mit StrechtBlt auch funktionieren, aber die übergabe Parameter sorry
  10. Ich denke das es mit Strechtblt nicht funktioniert, aber koor und größe. Vieleicht hilft dir ein Beispiel aus der MSDN wenn du mit ShrinkBitmap in der MSDN suchen läßt (nicht Index) erhälts du ein Sample.(reines Win32 API) Hier werden Bitmaps in ein Popup Menü hinein kopiert Vorher werden sie auf die richtige Größe gebracht danach (besser wenn das Menü aufpoppt) werden die Bitmaps so hinein kopiert das sie die bkcolor nicht veränderen. (Klingt ähnlich wie bei dir) Wenn es weiter hilft, solltst du mal die grundfarbe der bitmaps im resource editor ändern (org weiß auf rot oder so) und versuchen das sie wieder richtig erscheinen. Vieleicht wird dann der Zusammenhang klarer. ( ist nur so'n gedanke hab's selber noch nicht probiert)
  11. Verstehe nicht was du willst. Irgendwie ist der Wurm drin. Also bei einer beliebigen Bitmap soll eine Farbe aus maskiert werden, um im Darstellenden DC tranparent (bzw nicht) gezeichtet zu werden. Habe ich verstanden. Die Maskierungfarbe soll beliebig aber eine sein. I got it. was ist dann long nObjectWidth, long nObjectHeight, SIZE m_PictureSize Welches Object und welches Picture (m_PictureSize which scope global,local,object? vieleicht kleiner Dreher wird aber nicht das Problem sein) Ach, jetzt verstehe ich den Rest erst. Nun soll die org. Bitmap auch noch gestrecht werden. Findest du das nicht ein bißchen viel? Strechten könnte man erstmal raus nehmen oder ? Nur um das Ganze übersichtlicher zu machen. Ich habe den Verdacht dass die Koordinaten und Größe irgendwie nicht stimmen. Am Schluß: SelectObject(dcWork, hBitmapMask); ::StretchBlt(dcDest, 0, 0, nObjectWidth, nObjectHeight, dcWork, 0, 0, m_PictureSize.cx, m_PictureSize.cy,SRCCOPY); Irgendwie fehlt mir der Zusammenhang zwischen der Größe hBitmapMask und m_PictureSize
  12. Nachtrag http://www.codeproject.com/bitmap/maskblt.asp
  13. FillRect würde ich durch SetPixel ersetzen, aber nur am Rande. Aber warum benutzt du nicht SRCAND oder SRCERASE oder so anstelle von SRCCOPY und läßt das Setzen von Hand bleiben? StretchBlt übernimmt dann diese Arbeit.
  14. STL wäre was. vector zum Beispiel. Vorschlag #include <string> #include <vector> #include <iostream> using std::string; using std::vector; using std::cout; using std::endl; typedef vector<int> INTVEC; typedef vector<INTVEC> MATRIX; const INTVEC ROW(10,0); // 10 Zellen mit 0 init void ShowMatrix(MATRIX& m) { int i,j; for(i=0;i<m.size();i++) { for(j=0;j<m[0].size();j++) { cout<<m[j]<<","; } cout<<endl; } } int main(int argc, char* argv[]) { MATRIX m; m.resize(10,ROW); // Größe ändern m.push_back(ROW); //Neue Reihe //Vorsicht mit unterschiedlich großen Rows //Funzt aber der Zugriff //eigentlich eine eigene Matrix Klasse bauen m[0][0]=34; m[4][4]=67; printf("Hallo Welt!\n"); ShowMatrix(m); getchar(); return 0; }
  15. Wie wärs mit #include <fstream.h> fstream InputFile; InputFile.open(pszFile,ios::in,filebuf::text); InputFil>>iVer; InputFile>>nCount; InputFile>>iRow; InputFile>>iCol; InputFile.close(); und ofstream OutputFile; OutputFile.open(pszFile,ios::out,filebuf::text); OutputFile<<1<<endl; OutputFile<<nCount <<endl; OutputFile<<nRows <<endl; OutputFile<<nColumns <<endl; OutputFile.close(); wenn du keine MFC benutzen willst
  16. Gut, mal zur Probe #include <string> #include <vector> class CWordList { public: typedef struct tagFILEPARAM stl::string sName; stl::string sPath; }FILEPARAM; typdef struct tagWORDPARAM { int nFileIndex; int nCount; }WORDPARAM; typdef stl::vector<int,FILEPARAM> FILEVEC; typdef stl::vector<int,WORDPARAM> WORDVEC; typdef struct tagWORDSCAN { stl:string sWord; WORDVEC WordVec; }WORDSCAN; typedef stl::vector<int,WORDSCAN> SCANVEC; private: FILEVEC a_FileVec; SCANVEC a_ScanVec; public: int AddFile(const char*pszFilePath) { for(int i=0;i< a_FileVec.size();i++){ if(!a_FileVec.sPath.compare(pszFilePath)){ return i; } } FILEPARAM fp; fp.sName=//split filename jetzt nicht wichtig fp.sPath=pszFilePath; a_FileVec.push_back(fp); return a_FileVec.size()-1; } void AddWord(const char*pszFilePath,const char*pszWord) { WORDPARAM wp; wp.iFileIndex=iFileIndex; wp.nCount=1; int iFileIndex=AddFile(pszFilePath); for(int i=0;i< a_ScanVec.size();i++){ if(!a_ScanVec.sWord.compare(pszWord)){ for(int j=0;a_ScanVec.WordVec.size();j++){ if(a_ScanVec.WordVec[j].iFileIndex ==iFileIndex){ a_ScanVec.WordVec[j].nCount++; return; } a_ScanVec.WordVec.push_back(wp); return; } } } WORDSCAN ws; ws.WordVec.push_back(wp); ws.sWord=pszWord; a_ScanVec.push_back(ws); } }; So, ich habe das nicht compiliert, sollte aber laufen. Jetzt würde HowManyWords eigentlich laufen in der MSDN werden die meisten funktionen beschrieben, aber leider nur wenig über die Zusammenhänge. Es gibt von Ulrich Breymann Die C++ Standard Template Library. Tja, wirkt irgendwie kompliziert aber ist ja auch nicht ganz einfach. Ich hoffe du hast jetzt einen kleinen Ansatz. Ein Vector ist nichts anders als eine Klasse die eine dynamisches Array birgt. Da dies sehr oft gebraucht wird und das Handling von dyn. Arrays, zwar einfach aber man auch schnell Fehler machen kann und der Ablauf immer der Gleiche nur die Datentypen anders sind ist ein Template genau die richtige Antwort
  17. Gut, ich glaube ich habe so langsam die Dimension der Aufgabenstellung begriffen. Möchte mich für meinen Schnellschuß entschuldigen. Ich würde mich gern an den Vorschlag von klotzkopp halten. Wobei ich noch nicht ganz verstanden habe wie das nun wircklich vor sich gehen soll. int CScanner::HowManyWords(const char* pszWord,const char* pszFileName) { int i; int iAnzahl=0; for (i=0;i<meineWortListe.size();i++){ if(!strcmp(meineWortListe.szWort,pszWord)){ // und nun? // woher weiß ich jetzt wie oft dieses Wort in welcher // Datei vorkammen? } } return iAnzahl; }; Aber vieleicht bin ich ein wenig auf dem Holzweg und diese Frage ergibt sich gar nicht.
  18. Also, wenn ich das richtig verstehe ist das Problem die Anzahl der Strings, die in Dateien gefunden worden zu ermitteln. Ein normales Array hat einen ganzzahligen Index. Dieser ist aber ungeeignet da du ja ein String findest. Normalerweise mußstest Du jetzt in deinem Array immer suchen, ob und wo sich der gefunde String befindet. Kann man machen, vieleicht als ersten Schritt. Steigt allerdings die Anzahl der gefunden Strings wird die Sucherei lästig und zeitraubend. Kannst ja mal ausprobieren. So, nun zu der Mappe, eine Mappe kombiniert die Eigenschaften eines Arrays und einer Liste. Vieleicht noch ein Wort zur STL (Standard template library) hier versammeln sich Standard Container (Listen, Arrays, sets, Maps usw.) die von Programmierern oft benutzt werden ... .. ich schreib gleich weiter ciao
  19. Ich kenn zwar nicht die volle Aufgabenstellung, da ich heute das erste mal hier rein schaue. Mein Vorschlag wäre eine Mappe aus der STL zu benutzen. #include <map> #include <string> typedef stl::map<stl::string,int> INDEXMAP; oder typdef struct tagIndexInfo{ int count; // ... // what ever you need // ... }INDEXINFO; typedef stl::map<stl::string,INDEXINFO> INDEXMAP; Der Vorteil ist, das Du über den String an die dazu gehörenden Daten kommst und nicht über den Index als Integer. Die Mappe wächst autom. mit und du brauchst nicht viel programmieren. Jedenfalls nicht das Handling deiner Daten.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...