images drehen
-
moin moin!
weiss jemand von euch, wie ich am besten das bild in einem TImage objekt um 90 grad drehen kann?
frohe weihnachten
thx, mitch
-
ja Du liesst die Bildpunkte der Reihe nach aus und
schreibst sie dann der reihe nach von oben nach unten in ein anderes Bitmap.AnsiString TEMPNAME; Screen->Cursor=crHourGlass; //rechts drehen AnsiString OPEN_FILE,SAVE_NAME; OPEN_FILE=Edit4->Text; if(!(OPEN_FILE == "KEIN_BILD_GEWÄHLT")) { TJPEGImage *obj = new TJPEGImage(); TEMPNAME=ExtractFileDir(OPEN_FILE) + "\\temp\\" + Get_B_Name(ExtractFileName(OPEN_FILE)); if(FileExists(TEMPNAME)) { EIGENE_MESSAGEBOX_BEARBEITETES_BILD_SCHNELLDREHEN(); }// if(FileExists(TEMPNAME)) else { obj->LoadFromFile(OPEN_FILE); Graphics::TBitmap* BildQuelle; Graphics::TBitmap* BildZiel; RGBTRIPLE *ptr; RGBTRIPLE *newscanline; BildQuelle = new Graphics::TBitmap; BildZiel = new Graphics::TBitmap; BildQuelle->PixelFormat = pf24bit; BildQuelle->Assign(obj); BildZiel->PixelFormat = pf24bit; BildZiel->Palette = BildQuelle->Palette; BildZiel->Height = BildQuelle->Width; BildZiel->Width = BildQuelle->Height; //--------- for (int y = 0; y < BildQuelle->Width; y++) { newscanline = static_cast<RGBTRIPLE*>(BildZiel->ScanLine[y]); for (int x = 0; x < BildQuelle->Height; x++) { ptr = static_cast<RGBTRIPLE*>(BildQuelle->ScanLine[x]); newscanline[BildQuelle->Height-1 - x] = ptr[y]; } } obj->Assign(BildZiel); DeleteFile(OPEN_FILE); obj->SaveToFile(OPEN_FILE); delete obj; delete BildQuelle; delete BildZiel; BT_BILDGROESSE_UEBERNEHMEN->Click(); }//else if(FileExists(TEMPNAME)) }//if(!(OPEN_FILE == "KEIN_BILD_GEWÄHLT")) else { ShowMessage(" Sie Haben kein Bild ausgewählt"); } Screen->Cursor=crArrow;
Heute mal ein Codebeispiel, aber nur weil Weihnachten ist
Da ist 'ne Menge Code von mir dabei, den du nicht brauchst.
Bei mir klickt man mit rechts auf das image, und kann dann u.a. waehlen: rechts und links drehenFrohe Weihnachten an alle
[ Dieser Beitrag wurde am 26.12.2002 um 12:53 Uhr von YLIREBUS editiert. ]
-
Hi,
ich brauche was ähnliches:
Über Canvas zeichne ich in einem Image. Diese Zeichnung soll dann mit transparentem Hintergrund über ein anderes Image gelegt werden. Da dieses aber nicht immer die gleiche Ausrichtung hat, muss ich das überlagernde drehen können. Geht das ?
Hab leider keinen Anhaltspunkt, wie ich Deinen Code modifizieren könnte.
Schönen Dank,
Iatros
-
Hallo!
Ich habe das Beispiel gerade probiert. Funzt wunderbar!! Das Bild wird aber immer rechts herum gedreht. Wie müsste denn die Schleife laufen, wenn das Bild links herum gedreht werden soll? :p
-
// Bild um 90 Grad drehen for (int y = 0; y < BildQuelle->Width; y++) { newscanline = static_cast<RGBTRIPLE*>(BildZiel->ScanLine[(BildZiel->Height -1) - y]); for (int x = 0; x < BildQuelle->Height; x++) { ptr = static_cast<RGBTRIPLE*>(BildQuelle->ScanLine[x]); newscanline[x] = ptr[y]; } }
-
Danke, funzt!!!!