Estas funções eu tenho guardadas mas nunca usei: -------------------- type TRGBArray = array[Word] of TRGBTriple; pRGBArray = ^TRGBArray;
procedure SmoothResize(Src, Dst: TBitmap); var x, y: Integer; xP, yP: Integer; xP2, yP2: Integer; SrcLine1, SrcLine2: pRGBArray; t3: Integer; z, z2, iz2: Integer; DstLine: pRGBArray; DstGap: Integer; w1, w2, w3, w4: Integer; begin Src.PixelFormat := pf24Bit; Dst.PixelFormat := pf24Bit; if (Src.Width = Dst.Width) and (Src.Height = Dst.Height) then Dst.Assign(Src) else begin DstLine := Dst.ScanLine[0]; DstGap := Integer(Dst.ScanLine[1]) - Integer(DstLine); xP2 := MulDiv(pred(Src.Width), $10000, Dst.Width); yP2 := MulDiv(pred(Src.Height), $10000, Dst.Height); yP := 0; for y := 0 to pred(Dst.Height) do begin xP := 0; SrcLine1 := Src.ScanLine[yP shr 16]; if (yP shr 16 < pred(Src.Height)) then SrcLine2 := Src.ScanLine[succ(yP shr 16)] else SrcLine2 := Src.ScanLine[yP shr 16]; z2 := succ(yP and $FFFF); iz2 := succ((not yp) and $FFFF); for x := 0 to pred(Dst.Width) do begin t3 := xP shr 16; z := xP and $FFFF; w2 := MulDiv(z, iz2, $10000); w1 := iz2 - w2; w4 := MulDiv(z, z2, $10000); w3 := z2 - w4; DstLine[x].rgbtRed := (SrcLine1[t3].rgbtRed * w1 + SrcLine1[t3 + 1].rgbtRed * w2 + SrcLine2[t3].rgbtRed * w3 + SrcLine2[t3 + 1].rgbtRed * w4) shr 16; DstLine[x].rgbtGreen := (SrcLine1[t3].rgbtGreen * w1 + SrcLine1[t3 + 1].rgbtGreen * w2 + SrcLine2[t3].rgbtGreen * w3 + SrcLine2[t3 + 1].rgbtGreen * w4) shr 16; DstLine[x].rgbtBlue := (SrcLine1[t3].rgbtBlue * w1 + SrcLine1[t3 + 1].rgbtBlue * w2 + SrcLine2[t3].rgbtBlue * w3 + SrcLine2[t3 + 1].rgbtBlue * w4) shr 16; Inc(xP, xP2); end; {for} Inc(yP, yP2); DstLine := pRGBArray(Integer(DstLine) + DstGap); end; {for} end; {if} end; {SmoothResize} function LoadJPEGPictureFile(Bitmap: TBitmap; FilePath, FileName: string): Boolean; var JPEGImage: TJPEGImage; begin result := true; if (FileName = '') then // No FileName so nothing Result := False //to load - return False... else begin try // Start of try except JPEGImage := TJPEGImage.Create; // Create the JPEG image... try // now try // to load the file but JPEGImage.LoadFromFile(FilePath + FileName); // might fail...with an Exception. Bitmap.Assign(JPEGImage); // Assign the image to our bitmap.Result := True; // Got it so return True. finally JPEGImage.Free; // ...must get rid of the JPEG image. finally end; {try} except Result := False; // Oops...never Loaded, so return False. end; {try} end; {if} end; {LoadJPEGPictureFile} {--------------------------------------------------------------------------- -----------------------} function SaveJPEGPictureFile(Bitmap: TBitmap; FilePath, FileName: string; Quality: Integer): Boolean; begin Result := True; try if ForceDirectories(FilePath) then begin with TJPegImage.Create do begin try Assign(Bitmap); CompressionQuality := 70; SaveToFile(FilePath + FileName); finally Free; end; {try} end; {with} end; {if} except raise; Result := False; end; {try} end; {SaveJPEGPictureFile} procedure ResizeImage(FileName: string; MaxWidth: Integer); var OldBitmap: TBitmap; NewBitmap: TBitmap; aWidth: Integer; begin OldBitmap := TBitmap.Create; try if LoadJPEGPictureFile(OldBitmap, ExtractFilePath(FileName), ExtractFileName(FileName)) then begin aWidth := OldBitmap.Width; if (OldBitmap.Width > MaxWidth) then begin aWidth := MaxWidth; NewBitmap := TBitmap.Create; try NewBitmap.Width := MaxWidth; NewBitmap.Height := MulDiv(MaxWidth, OldBitmap.Height, OldBitmap.Width); SmoothResize(OldBitmap, NewBitmap); RenameFile(FileName, ChangeFileExt(FileName, '.$$$')); if SaveJPEGPictureFile(NewBitmap, ExtractFilePath(FileName), ExtractFileName(FileName), 75) then DeleteFile(ChangeFileExt(FileName, '.$$$')) else RenameFile(ChangeFileExt(FileName, '.$$$'), FileName); finally NewBitmap.Free; end; {try} end; {if} end; {if} finally OldBitmap.Free; end; {try} end; // Para usar cuidado, ele apaga a imagem de origem procedure TForm1.Button1Click(Sender: TObject); begin ResizeImage('C:\tolardo1.jpg', 99); end; -------------------- procedure ResizeBitmap(imgo, imgd: TBitmap; nw, nh: Integer); var xini, xfi, yini, yfi, saltx, salty: single; x, y, px, py, tpix: integer; PixelColor: TColor; r, g, b: longint; function MyRound(const X: Double): Integer; begin Result := Trunc(x); if Frac(x) >= 0.5 then if x >= 0 then Result := Result + 1 else Result := Result - 1; // Result := Trunc(X + (-2 * Ord(X < 0) + 1) * 0.5); end; begin // Set target size imgd.Width := nw; imgd.Height := nh; // Calcs width & height of every area of pixels of the source bitmap saltx := imgo.Width / nw; salty := imgo.Height / nh; yfi := 0; for y := 0 to nh - 1 do begin // Set the initial and final Y coordinate of a pixel area yini := yfi; yfi := yini + salty; if yfi >= imgo.Height then yfi := imgo.Height - 1; xfi := 0; for x := 0 to nw - 1 do begin // Set the inital and final X coordinate of a pixel area xini := xfi; xfi := xini + saltx; if xfi >= imgo.Width then xfi := imgo.Width - 1; // This loop calcs del average result color of a pixel area // of the imaginary grid r := 0; g := 0; b := 0; tpix := 0; for py := MyRound(yini) to MyRound(yfi - 1) do begin for px := MyRound(xini) to MyRound(xfi) do begin Inc(tpix); PixelColor := ColorToRGB(imgo.Canvas.Pixels[px, py]); r := r + GetRValue(PixelColor); g := g + GetGValue(PixelColor); b := b + GetBValue(PixelColor); end; end; // Draws the result pixel imgd.Canvas.Pixels[x, y] := rgb(MyRound(r / tpix), MyRound(g / tpix), MyRound(b / tpix) ); end; end; end; []s Walter Alves Chagas Junior Projeto e desenvolvimento Telemont Engenharia de telecomunicações [EMAIL PROTECTED] Fone: (31) 3389-8215 Fax: (31) 3389-8200 > -----Mensagem original----- > De: Uillian Fernandes [mailto:[EMAIL PROTECTED] > Enviada em: quinta-feira, 17 de fevereiro de 2005 12:51 > Para: delphi-br@yahoogrupos.com.br > Assunto: [delphi-br] TRABALHANDO COM IMAGENS !!!!!!!!!!!!!!!!!!!!!!!!! > > > > Pessoal, além de trabalhar com Delphi eu tb trabalho com PHP. > > Em PHP eu tenho uma rotina que através de uma imagem obtido > do banco(campo blob) eu consigo reformatá-la e diminur > bastante o tamanho dela, ou seja, a imagem é gravado no banco > com 200k, eu consigo formatá-la e chegar a 18 ou 20k. > > Alguém conhece alguma rotina em Delphi que faça o mesmo????? > > Atenciosamente > ----- Original Message ----- > From: Rodrigo Izquierdo da Motta > To: delphi-br@yahoogrupos.com.br > Sent: Thursday, February 17, 2005 2:11 PM > Subject: Re: [delphi-br] F12 no Kylix 2 > > > Ola Bruno!!! > > Sobre o teste do teclado, sim eu jah testei, ele > funciona normalmente, realmente so no Kylix 2 que da > isso, mas eu venho notando, parece que o Kylix no > Mandrake 10, tem um Bugs estranhos mesmo, ele apezar > de mostrar foco em uma janela, na verdade o foco esta > em outra, e acredito que por isso que o F12 naum > funcione sempre, pois o foco naum esta onde eu penso > que esta, e outra bug bem chato eh o ShowModal, ele as > vezes mostra o ShowModal de um View Form por exemplo, > atras de outras janelas, e vc fica ali, que nem um > palhaco tentando usar o sistema, ate que vc percebe > que tem um Modal atras travando tudo, enfim eh muito > estranho. > > Mas obrigado pela tentativa de ajuda cara, vlw > mesmo!!! > > Um Abraco a Todos!!!! > > > (*=================================================*) > > --- Bruno <[EMAIL PROTECTED]> escreveu: > > > > Já verificou em outros aplicativos se não é seu > > teclado? > > > > Em Mon, 31 Jan 2005 11:15:34 -0300 (ART), Rodrigo > > Izquierdo da Motta > > <[EMAIL PROTECTED]> escreveu: > > > > > Ola Lista!!! > > > > > > Eu uso o Kylix 2, e estou com um problema basico, > > mas > > > que encomoda com o passar do tempo, eh o sequinte, > > > quando estou no formulario e quero passar para o > > > codigo fonte, eu uso muito o F12, mas no Kylix, > > ele > > > naum funciona sempre, as vezes tenho que usar o > > mouse, > > > e clicar no botao que faz isso, ai do codigo pro > > > formulario ele volta, ai se eu naum usar o botao > > pra > > > voltar pro codigo, se eu usar o mouse por exemplo > > e > > > clicar no codigo o F12 denovo, naum funciona mais. > > > Naum sei se deu pra entender muito bem, pois eh > > > confuso de explicar. Mas Basicamente o F12 naum > > > funciona. Sera que alguem jah passou por isso e > > sabe > > > resolver? > > > > > > Obrigado!!! > > > > > > > > > > > > ===== > > > Rodrigo Izquierdo da Motta. > > > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________________ > > > Yahoo! Acesso Grátis - Instale o discador do > > Yahoo! agora. > > > http://br.acesso.yahoo.com/ > > > - Internet rápida e grátis > > > > > > > > > > > > > > -- > > Bruno Araujo > > > > > > > > > > -- > > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA > > MENSAGEM >>>>> > > > > Para ver as mensagens antigas, acesse: > > http://br.groups.yahoo.com/group/delphi-br/messages > > > > Para falar com o moderador, envie um e-mail para: > > [EMAIL PROTECTED] ou > > [EMAIL PROTECTED] > > > > Links do Yahoo! Grupos > > > > > > > > http://br.yahoo.com/info/utos.html > > > > > > > > > > > > > > ===== > Rodrigo Izquierdo da Motta. > > > > > > > > _______________________________________________________ > Yahoo! Acesso Grátis - Instale o discador do Yahoo! agora. > http://br.acesso.yahoo.com/ - Internet rápida e grátis > > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > Para ver as mensagens antigas, acesse: > http://br.groups.yahoo.com/group/delphi-br/messages > > Para falar com o moderador, envie um e-mail para: > [EMAIL PROTECTED] ou [EMAIL PROTECTED] > > > > Yahoo! Grupos, um serviço oferecido por: > > São Paulo Rio de Janeiro Curitiba Porto > Alegre Belo Horizonte Brasília > > > > > -------------------------------------------------------------- > ---------------- > Links do Yahoo! Grupos > > a.. Para visitar o site do seu grupo na web, acesse: > http://br.groups.yahoo.com/group/delphi-br/ > > b.. Para sair deste grupo, envie um e-mail para: > [EMAIL PROTECTED] > > c.. O uso que você faz do Yahoo! Grupos está sujeito aos > Termos do Serviço do Yahoo!. > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > -- > <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> > > Para ver as mensagens antigas, acesse: > http://br.groups.yahoo.com/group/delphi-br/messages > > Para falar com o moderador, envie um e-mail para: > [EMAIL PROTECTED] ou [EMAIL PROTECTED] > > Links do Yahoo! Grupos > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html