Newsgroup: it.comp.lang.delphi
Titolo: Schiaritemi le idee su CopyRect vi prego

Stò diventando + scema di quanto non lo sia già...
Seguitemi nel discorso...
CopyRect copia una parte di immagine in un'altra, specificando le varie
coordinate...giusto? (sììììì,...forse)
Mettiamo che io ho già 2 immagini (chiamamole bmp1 e bmp2), e che voglia
incollarle una sopra e una sotto, eliminando i bordi superiori e inferiori
di ogni immagine (ogni immagine ha 2 righe di pixel che non mi interessano
sia in testa che in coda) ed avere l'iimagine definitiva in 'NewBmp'.
Dovrebbe essere semplice...
Definisco la nuova immagine...
var
Bmp1, Bmp2: TBitmap;  (le ho già caricate non preoccupatevi)
NewBmp: TBitmap;
....
NewBmp := TBitmap.Create;
NewBmp.Width := Max(Bmp1.Width, Bmp2.Width);
NewBmp.Height := Bmp1.Height + Bmp2.Height - 8;
NewBmp.Canvas.Draw(0, 0,Bmp1);               e già questo è sbagliato, come
tolgo i bordi?!?!
Ora, nonostante abbia letto e riletto l'help e cercato sul mitico google
(sono stata sbuguardata di recente sulla mia bravura nelle ricerche da uno
di voi), non riesco a capire come diavolo fare!. Ho fatto varie prove, ma
non ci tolgo le gambette :°(
Viola

Viola
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it

   rectTo2 := Rect(0,96,96,192);
rectFrom è la regione quadrata 2,2 / 98,98    non dovrebbe essere (0,2
,bmpIo.width,bmpio.height-4)
????????

Facciamo + chiarezza...le 2 immagini hanno la stella larghezza, ma altezza
diversa

Risolto!!!!!!!!!!!!!!
Cosě facendo :)
 NewBmp := TBitmap.Create;
  NewBmp := TBitmap.Create;
  NewBmp.Width:=bmp1.Width-4; //o bmp2, sono larghe uguali :)
  NewBmp.Height:=(bmp1.Height-4)+(bmp2.Height-4);
  rec1:=Rect(2,2,bmp1.Width-2,bmp1.Height-2);
  rec2:=Rect(2,2,bmp2.Width-2,bmp2.Height-2);
  recto1:=Rect(0,0,NewBmp.Width,bmp1.Height-4);
  recto2:=Rect(0,bmp1.height-4,bmp1.Width-4,NewBmp.Height);
  NewBmp.Canvas.CopyRect(recto1,bmp1.Canvas,rec1);
  NewBmp.Canvas.CopyRect(recto2,bmp2.Canvas,rec2);
Grazie dell'aiuto! E' stato fondamentale!

>all'altra su una nuova Bitmap
ed intendevo che poi implementavi tu, la funzione
completa, in base al livello di dinamicità che ti
serviva :P (come ho letto nel tuo ultimo post ;) )


  NewBmp.Canvas.CopyRect(recto2,bmp2.Canvas,rec2);
trovando utile una funzioncina che togliesse una
cornice ad una bmp e ne restituisse una copia con i
tagli effettuati, me la sono implementata, in un
momento di pausa ovviamente :P, te la posto, dopo i
saluti, insieme al codice che la usa per fare quello
che serve a te ... sperando di aver capito bene :)
p.s. scusate la poca fantasia per il nome della
funzione :D
	Ciao
	MassimoB
 
---------------------------
http:\\
www.massimobeschi.it
------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
Var
  tempBmp: TBitmap;
begin
  tempBmp := TBitmap.Create;
  try
    With image3.Picture.Bitmap Do
    Begin
      Scorniciatore(
                    Image1.Picture.Bitmap,
                    tempBmp,
                    5,0
                    );
      Assign(tempBmp);
      Scorniciatore(
                    Image2.Picture.Bitmap,
                    tempBmp,
                    5,0
                    );
      Width := Max(
                   tempBmp.Width,
                   image3.Picture.Bitmap.Width
                   );
      Height := image3.Picture.Bitmap.Height
                + tempBmp.Height;
      Canvas.Draw(
                  0,
                  image3.Picture.Bitmap.Height
                        -tempBmp.Height,
                  tempBmp
                  );
    End;
  Finally
    tempBmp.Free;
  End;
end;
Procedure TForm1.Scorniciatore(
   ABitmapFrom,
   ABitmapTo: TBitmap;
   VFrameThickness,
   OFrameThickness: Integer
   );
Var
   rectIn,
   rectOut: TRect;
begin
    rectIn := Rect(
              OFrameThickness,
              VFrameThickness,
              ABitmapFrom.Width-OFrameThickness,
              ABitmapFrom.Height-VFrameThickness
              );
    rectOut := Rect(
              0,
              0,
              ABitmapFrom.Width-(OFrameThickness*2),
              ABitmapFrom.Height-(VFrameThickness*2)
              );
    ABitmapTo.Height := rectOut.Bottom-rectOut.Top;
    ABitmapTo.Width := rectOut.Right-rectOut.Left;
    ABitmapTo.Canvas.CopyRect(
                              rectOut,
                              ABitmapFrom.Canvas,
                              rectIn
                              );
end;
------------------------------------------------------------------

Okkio!, non ho ancora provato la tua funzione, ma quella che avevo fatto io
non funziona bene!
L'ho messa in un loop, attaccando molte immagini, l'immagine finale risulta
deformata, ci deve essere qualche parametro sbagliato da qualche parte :(
Vedi l'errore da qualche parte qui?! (bmp1 e bmp2 le carico precedentemente)
 NewBmp := TBitmap.Create;
  NewBmp := TBitmap.Create;
  NewBmp.Width:=bmp1.Width-4; //o bmp2, sono larghe uguali :)
  NewBmp.Height:=(bmp1.Height-4)+(bmp2.Height-4);
  rec1:=Rect(2,2,bmp1.Width-2,bmp1.Height-2);
  rec2:=Rect(2,2,bmp2.Width-2,bmp2.Height-2);
  recto1:=Rect(0,0,NewBmp.Width,bmp1.Height-4);
  recto2:=Rect(0,bmp1.height-4,bmp1.Width-4,NewBmp.Height);
  NewBmp.Canvas.CopyRect(recto1,bmp1.Canvas,rec1);
  NewBmp.Canvas.CopyRect(recto2,bmp2.Canvas,rec2);
  NewBmp.SaveToFile(FileName);

Errata corrige....era proprio il loop sgabliato ihihihihih


Viola, scusa se cambio argomento riguardo il tuo post, ma questa funzione ti
serve per riunire i pezzi del twebbrowser dei tuoi post precedenti giusto ?
Ora, un'idea che mi era venuta poteva essere di aumentare le dimensioni del
twebbrowser finche questo NON ha piu barre di scorrimento...se questa cosa
di unire le due bmp non ti serve per fare questo, scusa.
ZioGian

 di unire le due bmp non ti serve per fare questo, scusa.
Non serve purtroppo.....o meglio non è implementabile se il contenuto supera
le dimensioni dell'ospite (cioè della form)...fatti 2 prove :)
Ciao!

 le dimensioni dell'ospite (cioè della form)...fatti 2 prove :)
Grazie della delucidazione, non ci ho provato, era un'idea che mi era
venuta...
Ed aumentando la dimensione della form ?
ZIoGian.


Fatte...e pare che funzioni come dovrebbe (ho generato un bmp di 1000*5000
punti)..ora l'unico problema (per me..magari pe te no) potrebbe essere
quello di scoprire quando il webbrowser è grande abbastanza...
ZioGian