in bilder "schreiben"
-
hallo
ich habe ne frage:
Ein Freund von mir hat eine Webpage mit zig bildern, die er selbst gemacht hat.
Bis jetzt war das so, dass er ein Bild in paint geladen hat, und dann seine url reingeschrieben hat.Wenn er aber aufeinmal 100 Bilder einfügt, daaaaauuuuert das lange.
Jetzt hat ich mir überlegt, da es ja zig klassen gibt bilder ( jpeg ) zu laden und anzuzeigen, auch in diese Bilder einen text zu schreiben.Man könnte das auch so machen, dass man das Bild in der grösse xyz hat und ein anderes bild ( auch jpeg z.b. ), welches klein ist und nur die url hat ) draufzulegen. wäre gut wenn man es drauflegt ( trazparent, so das nur die schrift zu sehen ist)
Ich weiss das es die klassen gibt, und die anzeigen ( auch tranzparent ) lassen kann, aber wie funktioniert das mit dem drüberlegen und dann abspeichern? gibt es da fertige fkt?
z.b. pic1 = load_pic(mein_pfad)
pic2 = load_pic(mein_pfad) // hat z.b. gleiche grösse, schrift nur unten recht und hintergrund ne defaultfarbe zum tranparent machen
pic3 = pic1+pic2
pic3 abspeichern.oder pic2 hat normale grösse und ich kann position angeben wo in pic1 draufgelegt werden soll.
was auch nicht schlecht wäre, dass man einfach den explorer geöffnet hat und dann die bilder markiert und in eine listbox rüberzieht ( die bilder sollen dann alle bearbeitet werden. aber ich glaube in einer listbox kann man nicht "reinziehen". Welche klasse nimmt man dann da?
merci
PS: achja gibt es schon ein programm was sowas macht?
-
hmmm, also
antwortet jetzt keiner, weil er
- keine ahnung hat
- die frage ihm zu doof ist
- es nicht geht
- mein problem nicht versteht
- der antwort button an der stelle fehlt?
-
ich weiß zwar nicht, ab es auch einfacher geht, aber mit OpenCV ist das möglich, da lädst du das Bild, schreibst was rein und speicherts es wieder, ganz einfach und nur 3 Zeilen (+ 1 zur Deklaratioin des Bildpointers :))
MfG
-
Du könntest GDI+ nehmen, es ist Windows native und läuft afaik ab Windows 98. Drag & Drop funktioniert in jedem Fenster, darüber solltest du dir am wenigsten Sorgen machen.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlus.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes.asp
-
also ich habe jetzt etwas gefunden und es so versucht
int row = m_listbox_files.GetCurSel(); //CBitmap biBildchen; CString str; m_listbox_files.GetText(row,str); //biBildchen.LoadBitmap(str); //m_pic_control.SetBitmap(biBildchen); // geht nicht, hmmm?? /// neuer versuch, neue klasse CPicture pic; pic.Load(str); CDC test; test. CRect rec; rec.SetRect(0,0,50,50; // jetzt würde ich den text schreiben pic.Show(test, rec ); // hier würde ich das bild anzeigen ( mit dem text halt) // und hier abspeichern pic.SaveAsBitmap(m_pfad);m_pic_control.SetBitmap(biBildchen); leider geht das nicht. habe einfach ein piccontrol auf meinem dialog und ne control variable namens m_pic_control gegeben.
jetzt müsste es doch angezeigt werden darin oder? da das nicht ging habe ich gedacht, dass es nicht geht, weil das bild zu gross ist. dann hab ich das bild kleiner gemacht, hat aber auch nichts geholfen
beim neuen versuch habe ich die Picture.h klasse genommen
CRect gibt ja die kordinaten an. das krieg ich noch irgendwie hin. aber CDC?? damit kann ich auch formatiert ins bild schreiben. aber wie weise ich jetzt mein bild da hinzu??? es gibt ne funkttest.GetCurrentBitmap(); // warum nicht test.GetCurrentBitmap(mein_pic);hmm wer kann helfen?
-
ok ich habs fast hingekriegt
was muss ich machen, damit ich reinschreiben kann??
ich kann bild laden und speichern
nur das mit TextOut klappt nicht da ich mein
pDC nicht meinem pic zuweisen kann. woher soll er wissen das ich jetzt pic meine?int row = m_listbox_files.GetCurSel(); CString str; m_listbox_files.GetText(row,str); CPicture pic; pic.Load(str); // ok bild ist drinnen DCD *pDC CRect rec; rec.SetRect(0,0,100,100); //pic.UpdateSizeOnDC(&cdc); / hier bekommts leider nur die size, aber selbst das klappt nicht CString mobile = "www.lollig.de"; // prob ist, wie sag ich ihm, dass mein pic pDC ist??? // pDC.DrawText("www.lollig.de",rec,DT_CENTER); // hier mit rec versucht pDC.TextOut(100,100,mobile); // hier gehts ja anscheinend ohne //pic.Show(&pDC,rec); pic.SaveAsBitmap( "C:\\meinbild.bmp"); // jipi bild kann abgespeichert werden, wenn ich nicht versuche reinzuschreiben
-
hmm, fast hab ichs.
also bis jetzt hab ichint row = m_listbox_files.GetCurSel(); CBitmap Bild; CString str; m_listbox_files.GetText(row,str); Bild.LoadBitmap(str); // hier mit CBitmap klasse CPicture pic; // hier ein versuch mit der CPicture Klasse pic.Load(str); CRect rec; rec.SetRect(0,0,100,100); // ein rec erzeugen font1.CreateFont( 12, // nHeight 0, // nWidth 0, // nEscapement 0, // nOrientation FW_NORMAL, // nWeight FALSE, // bItalic FALSE, // bUnderline 0, // cStrikeOut ANSI_CHARSET, // nCharSet OUT_DEFAULT_PRECIS, // nOutPrecision CLIP_DEFAULT_PRECIS, // nClipPrecision DEFAULT_QUALITY, // nQuality DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily "Arial"); // lpszFacename CString mobile = "www.meinesite.de"; // der zu schreibende string CDC speicherDC; speicherDC.CreateCompatibleDC(GetDC()); speicherDC.SelectObject(&pic); // mal pic mal Bild stehen, kein fehler, aber es passiert auch nichts :( speicherDC.SelectObject(&font1); // den font zuweisen speicherDC.TextOut(500,500,mobile); // hier versuch ich mit TextOut zu schreiben speicherDC.DrawText(mobile,rec,DT_CENTER); // hier ein versuch mit der drawtext methode m_pic_control.SetBitmap(Bild); CDC MemDC; // hab ich jetzt genommen, da im forum so einer bitmap abgespeichert hat MemDC.CreateCompatibleDC( &speicherDC ); MemDC.SelectObject(Bild); speicherDC.SelectObject(Bild); speicherDC.BitBlt(0,0,1000,900, &MemDC, 0,0, SRCCOPY); //Inhalt des MemDC in Bitmap blitten HBITMAP hBitmap=Bild; WriteBitmap("c:\\test", hBitmap, speicherDC); // irgendwie macht der hier gar nichts. pic.SaveAsBitmap( "C:\\meinbild.bmp"); // der versuch klappt um zu schreiben, aber speichert nicht die schrift mit rein :( // write fkt, hier im forum gefunden //==================================== BOOL CBildprogrammDlg::WriteBitmap( LPTSTR szFile, HBITMAP hbitmap, HDC memdc) { BITMAP bmp; //Informationen über die übergebene Bitmap sammeln, bmp ist der Zielpuffer der Infos if(GetObject(hbitmap, sizeof(BITMAP), &bmp)) { BITMAPINFOHEADER BmpInfoHdr; //Struktur für Bitmap-Infoheader BITMAPFILEHEADER BmpFileHdr; //Struktur für Bitmap-Dateiheader //jetzt werden die gesammlten Infos in bmp ausgewertet und in die Strukts umgeschrieben BmpInfoHdr.biSize = sizeof(BITMAPINFOHEADER); BmpInfoHdr.biWidth = bmp.bmWidth; BmpInfoHdr.biHeight = bmp.bmHeight; BmpInfoHdr.biPlanes = bmp.bmPlanes; BmpInfoHdr.biBitCount = 24; BmpInfoHdr.biCompression = BI_RGB; BmpInfoHdr.biSizeImage = bmp.bmWidth*bmp.bmHeight*3; BmpFileHdr.bfType = 0x4d42; BmpFileHdr.bfReserved1 = 0; BmpFileHdr.bfReserved2 = 0; BmpFileHdr.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER); BmpFileHdr.bfSize = BmpFileHdr.bfOffBits+BmpInfoHdr.biSizeImage; //Heap-Speicher für die ins DIB-Format zu konvertierende Bitmap organisieren bmp.bmBits = (void*)GlobalAlloc(GMEM_FIXED, BmpInfoHdr.biSizeImage); //Bitmap ins DIB-Format umwandeln, wenn erfolgreich wird die DIB geschrieben if(GetDIBits(memdc, hbitmap, 0, BmpInfoHdr.biHeight, bmp.bmBits, (BITMAPINFO*)&BmpInfoHdr, DIB_RGB_COLORS) == BmpInfoHdr.biHeight) { //Datei erzeugen über Win-API (ist performanter als fstream-Funktionen) HANDLE hFile = CreateFile(szFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL); //Datei erzeugen erfolgreich? if(hFile != INVALID_HANDLE_VALUE) { //hier wird die Anzahl der geschriebenen Bytes abgelegt, aber nicht ausgewertet DWORD dwTmp; //Bitmap-Dateiheader schreiben WriteFile(hFile, &BmpFileHdr, sizeof(BITMAPFILEHEADER), &dwTmp, NULL); //Bitmap-Infoheader schreiben WriteFile(hFile, &BmpInfoHdr, sizeof(BITMAPINFOHEADER), &dwTmp, NULL); //Bitmap-Pixeldaten schreiben WriteFile(hFile, bmp.bmBits, BmpInfoHdr.biSizeImage, &dwTmp, NULL); } //Datei schliessen CloseHandle(hFile); } //Heapspeicher freigeben GlobalFree(bmp.bmBits); return TRUE; } //Nicht erfolgreich gewesen, leider leider ... return FALSE; }m_pic_control.SetBitmap(Bild); // ein Control Picture element eingefuegt // einfach in meinen dialog gezogen, markiert, und ne control variable vergeben, aber mit SetBitmap, passiert da gar nichts :( // wie ist es wenn das bild 1024*768 gross ist, aber mein control nur 200*200? // formartiert er richtig ( wohl kaum ) oder hab ich dann nur das obere eck ( anzunehmen)
-
also 2 fragen
benutzt niemand bitmap zum speichern?
kennt ihr ne klasse, welche
1.bitmap einfach laden und dann wieder speichern kann anhand von einem pfad?
2. eine klasse die mit jpeg und so zurechtkommt
3. eine klasse wo wo ich ein bild bearbeiten kann ( sprich in der art von textout )?wenn nicht wieso kann ich textout machen, aber das bild bleibt gleich?
wie speichert ihr die bitmaps?habe bei codeguru nach klassen geschaut
kann mit dieser klasse
1. laden
2. speichern
kann ich jetzt irgendwie konvertieren zw. jpeg und bmp?hat noch niemand bilder bearbeitet?
wie gesagt, weiter oben ist mein code.