CopyRect bei jpg-Bild
-
Hallo Leute
Erstmal ein Mega-Lob an alle "Superhirne" hier. Das Board ist echt eine grosse Hilfe.
Aber auch nach intensivem Durchstöbern der Suchfunktion, der faqs hier und der BCB(5)-Hilfe komme ich einfach nicht weiter.
Mein Problem:
Ich möchte mit ...->CopyRect(,,) einen Bereich von einem JPEG-Image (Image1) in ein anderes Image (Image2) kopieren.
Bisher habe ich es etwa so versucht:Image2->Width=Image1->Picture->Width; Image2->Height=Image1->Picture->Height; Image2->Picture->Bitmap->Canvas->CopyRect(TRect(0,0,50,50),Image1->Picture->Bitmap->Canvas,TRect(200,200,250,250));Doch Image2 bleibt leer.

Ich bekomme es einfach nicht hin und hoffe, dass mir hier einer den entscheidenen Tip gibt.
Danke im voraus...
-
Wenn in einem TImage ein Jpeg, GIF oder was anderes als Bitmap geladen ist, ist ...->Bitmap ungueltig!!!
Du musst die ...->Graphic drawen!
-
Danke für die schnelle Hilfe, Altenburger
Habe das schon versucht. Erfolglos...
Ich bräuchte ein konkretes Code-Beispiel.
Werde mich aber nochmal damit auseinandersetzen.
Danke, soweit
-
Hallo,
Hier hab ich einen Schnipsl aus einer meiner Komponenten bei der ich ein JPG einlade hin und her kopiere und später das ganze speicherbin kein profi aber vieleicht kannst ja was rausnehmen.
gruss
waldseeduoTJPEGImage *Einfuegepuffer = new TJPEGImage ; Einfuegepuffer->LoadFromFile(Dateiname); int Breitehauptbild = JPGImage->Width; int Breiteneubild = Einfuegepuffer->Width; TRect AHauptb, ZNeub ; //Quellrectangle ZNeub.Top = 0; ZNeub.left = 0; ZNeub.right = Einfuegepuffer->Width; ZNeub.Bottom = Einfuegepuffer->Height; //Zielrectangle AHauptb.top = JPGImage->Height ; AHauptb.left = 0; AHauptb.right = JPGImage->Width; float BreiteNeubild = Einfuegepuffer->Width; float BreiteHauptbild = JPGImage->Width; float Multipl = BreiteNeubild/BreiteHauptbild; int EinfuegeLaenge = Einfuegepuffer->Height / Multipl; AHauptb.Bottom = JPGImage->Height + EinfuegeLaenge; Graphics::TBitmap *BildHauptpuffer = new Graphics::TBitmap; Graphics::TBitmap *BildNeupuffer = new Graphics::TBitmap; BildHauptpuffer->Assign(JPGImage); BildNeupuffer->Assign(Einfuegepuffer); BildHauptpuffer->Canvas->Pen->Color = clBlack; BildHauptpuffer->Canvas->Pen->Width = 20; BildHauptpuffer->Canvas->MoveTo(0,BildHauptpuffer->Height ); //LinieZeichnen BildHauptpuffer->Canvas->LineTo(BildHauptpuffer->Width, BildHauptpuffer->Height); int adlaenge = 15 + EinfuegeLaenge; BildHauptpuffer->Height = BildHauptpuffer->Height + adlaenge; BildHauptpuffer->Canvas->CopyRect(AHauptb,BildNeupuffer->Canvas ,ZNeub); JPGImage->Assign(BildHauptpuffer);
-
WerdNochIrre schrieb:
...
Ich bräuchte ein konkretes Code-Beispiel.
...Was soll genau rauskommen?
1. Du hast ein Eingangsbild? ? JPEG
2. Du hast ein Ziel- Bild ? Bitmap?
3. Du willst einen Teil des Eingabebildes in Zielbild kopieren (aus JPeg in Bitmap)4. Wie gross soll danach Zielbild sein? so gross wie der kopierte Teil?
5. Wo in Zielbild soll die Kopie hin?
-
Zu 1. Ja, das Eingangsbild ist ein JPEG
Zu 2. Ob Bitmap oder nicht ist mir egal, Hauptsache es klappt am Ende
Zu 3. Ja,einen rechteckigen Teil in ein (leeres) TImage kopieren.
Zu 4. Das Zielbild soll später Bildschirmgrösse haben. (Das Quellbild ist also grösser als der Screen).
Zu 5. Auf den gesamten Screen aber nur ein Ausschnitt.( siehe "Zu 4." )
Danke
-
Danke an alle!
Habs nun doch geschafft:[code]
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include <jpeg.hpp> TForm1 *Form1; TRect Quelle,Ziel; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Ziel=Rect(0,0,Image1->Width,Image1->Height); Quelle=Rect(250,250,Image1->Width+250,Image1->Height+250); TJPEGImage *JPGBild = new TJPEGImage ; OpenDialog1->Execute(); JPGBild->LoadFromFile(OpenDialog1->FileName); Graphics::TBitmap *BildBitmap = new Graphics::TBitmap; BildBitmap->Assign(JPGBild); // kopieren Image1->Canvas->CopyRect(Ziel, BildBitmap->Canvas, Quelle); }