Ver Mensaje Individual
  #12  
Antiguo 01-02-2011
Avatar de sintecsl
sintecsl sintecsl is offline
Miembro
 
Registrado: jun 2008
Ubicación: Barcelona - Spain
Posts: 40
Reputación: 0
sintecsl Va por buen camino
Aportar algo mas

Veo que tienes la solución. De todas formas lo de reducir o ampliar siempre son pixels. Ni se crean ni se destruyen por si mismos al cambiar los DPI.

Lo de los DPI solo es metrica pura y dura. Es decir, te sirve para calcular
sobre un dispositivo el tamaño final de salida.

Ejemp : Si tienes una imagen de 200x100 pixels con un DPI de 300 (típico de
una impresora de inyección). Te estará indicando sobre una pulgada (2,54cm) ocupas 2/3 y 1/3. Es decir en Ancho=2,54*200/300=1,6933 cm
y el Alto=2,54*100/300=0,84666 cm

Esto se aplica a cualquier dispositivo (96 DPI dots por inche = Normalmente la pantalla).

Si reduces lo que tienes que hacer es interpolar matematicamente cogiendo matrices cuadrangulares con un entorno de n pixels a su alrededor.

Eso te dará un color promedio predominante que se hacercará bastante a la realidad.

De todas formas sacale partido al Windows (que pa eso se 'an matao los
programadores de la casa Micro...).

Te pongo un ejemplo de reducción de pixeles :

Código Delphi [-]

procedure TCapturaPantalla.CapturaPant;
Var
   C : TCanvas;
begin
     //Ocultar aplicación
  //   Application.MainForm.Visible := False;
  //   Sleep(100); //Dar tiempo al refresco de pantalla
     (* FORMA MEJORADA Y SENCILLA DE CAPTURA COMPLETA *)
     C:=TCanvas.Create;
     C.Handle := GetWindowDC(GetDesktopWindow); //Asignamos manejador
     //Asignamos al BitMap el mismo tamaño que tenemos actualmente
     FBMP.Width:=Round((ZoomXY.X2-ZoomXY.X1)*FReduccion/100.0);
     FBMP.Height:=Round((ZoomXY.Y2-ZoomXY.Y1)*FReduccion/100.0);
     if FAntialiasing then
        SetStretchBltMode(FBMP.Canvas.Handle, HALFTONE); //activa antialiasing
     FBMP.Canvas.CopyRect(Rect(0,0,FBMP.Width,FBMP.Height),C,
                          Rect(ZoomXY.X1,ZoomXY.Y1,ZoomXY.X2,ZoomXY.Y2));
     CreadoJPG:=False; //Para notificar que hay que crearlo
     CreadoGIF:=False; //Para notificar que hay que crearlo
     C.Free;
     //Hacemos reaparecer la aplicación que estaba en bandeja
   //  Application.MainForm.Visible := True;
     PrimeraVez:=False; //Ya no es la preimera vez
  //   Paint; //Dibujamos lo capturado
end;

Si solo quieres decrementar el tamaño que ocupa una imagen comprimela.

Saludos
__________________
www.sintecsl.es
Responder Con Cita