Zoom
-
Hallo,
unten angefügten Code hab ich aus dem Forum entnommen. Ich hab in einer Anwendung einen Screenshot gemacht und diesen als bmp gespeichert. Diese Dateien haben eine Aufläsung von 1013*681 und sind 2,63 MB groß. Nun will ich zwei Bilder nebeneinander anzeigen als Gegenüberstellung und dabei die einzelnen Bilder vergrößern / verkleinern lassen. Ich habe Images, die in einer Scrollbox integriert sind.
Das Problem ist, dass es nach 2x vergrößern immer beim SaveToFile den Fehler gibt, dass der Speicher nicht ausreichen würde.
Hat jemand einen Ansatz oder eine ganz andere Lösung ?
TRect ARect; Graphics::TBitmap *bmp = new Graphics::TBitmap(); TJPEGImage *jpg = new TJPEGImage(); jpg->LoadFromFile(sFileName); iFaktor++; // gewünschte neue Abmessungen festlegen bmp->Width = jpg->Width * iFaktor; bmp->Height = jpg->Height * iFaktor; // Rect mit den gleichen Abmessungen definieren und das per // StretchDraw vergrösserte JPEG auf das Bitmap zeichnen ARect = Rect(0, 0, jpg->Width * iFaktor, jpg->Height * iFaktor); bmp->Canvas->StretchDraw(ARect, jpg); // Inhalt des Bitmap auf das JPEG übertragen, speichern jpg->Assign(bmp); jpg->SaveToFile("test2.jpg"); Image1->Picture->LoadFromFile("test2.jpg"); delete jpg; delete bmp;
[code]
-
Ich hab es jetzt so gelöst und das reicht für meine Bedürfnisse auch aus. Nur bitte eine Frage - wie kann ich integrieren, dass beim Klick in das Bild diese Mausposition dann als Mittelpunkt der Anzeige verwendet wird ?
iFaktor1 += StrToInt(txtFaktor->Text); ScrollBox1->HorzScrollBar->Range+=iFaktor1; ScrollBox1->VertScrollBar->Range+=iFaktor1; imgLeft->Width = iWidth1 + iFaktor1; imgLeft->Height = iHeight1 + iFaktor1;
-
Hallo
OnMouseUp-Event des Images verwenden, auf Basis des Punktes und einfacher Geometrie neue Position links/oben berechnen und dann Bild neu laden/zeichnen.
bis bald
akari