FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
||||
|
||||
Rotando una imagen
Creo que es todo lo necesario para corregir imágenes escaneadas y tambien para edición de imagenes.
Modo de uso:
Alternativas óptimas: 180º Result.Canvas.CopyRect(Rect(0, 0, Width, Height), Canvas, Rect(Width, Height - 1, 0, 0)); 0º BitBlt(Result.Canvas.Handle, 0, 0, Width, Height, Canvas.Handle, 0, 0, SRCCOPY); PD: en un truco anterior (Crear Thumbnails en blanco y negro de archivos JPEG), no hice la siguiente aclaración; se debiese liberar en algún momento la memoria asignada por la función... retorna un TBitmap asignado por si el usuario requiera editar el grafico después de utilizar la función. |
#2
|
||||
|
||||
Vista la necesidad he convertido el anterior code a BCB, disfrútenlo;
Código:
#include <math.h> #include <math.hpp> // ... Graphics::TBitmap *Rotate(TCanvas *Source, int Width, int Height, int Angle, bool Reverse) { Double Radio = sqrt(pow(Width / 2, 2) + pow(Height / 2, 2)), AngleRad = (360 - (Angle % 360)) * M_PI / 180; TPoint Points[3] = {Point(Width, -Height), Point(Width, Height), Point(Width, Height)}; for (int Index = 0; Index < 3; Index++) { Double Angle = ArcTan2(Points[Index].y, Points[Index].x) + AngleRad + ((Index % 2)? 0 : M_PI); Points[Index] = Point(RoundTo((cos(Angle) * Radio) + Radio, 0), RoundTo(Radio - (sin(Angle) * Radio), 0)); } Graphics::TBitmap *Result = new Graphics::TBitmap(); Result->Canvas->Brush->Color = clFuchsia; Result->TransparentColor = clFuchsia; int Size = RoundTo(Radio * 2, 0); Result->Height = Size; Result->Width = Size; PlgBlt(Result->Canvas->Handle, Points, Source->Handle, 0, 0, Width, Height, 0, 0, 0); if (Reverse) Result->Canvas->CopyRect(Rect(0, 0, Size, Size), Result->Canvas, Rect(Size - 1, 0, 0, Size)); return Result; } Código:
void __fastcall TForm1::TrackBar1Change(TObject *Sender) { ImageHolder->Picture->Assign(Image1->Picture); Graphics::TBitmap *Bitmap = Rotate(ImageHolder->Canvas, ImageHolder->Width, ImageHolder->Height, TrackBar1->Position, CheckBox1->Checked); ImageHolder->Picture->Assign(Bitmap); Bitmap->Free(); } |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|