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
C:=TCanvas.Create;
C.Handle := GetWindowDC(GetDesktopWindow); 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);
FBMP.Canvas.CopyRect(Rect(0,0,FBMP.Width,FBMP.Height),C,
Rect(ZoomXY.X1,ZoomXY.Y1,ZoomXY.X2,ZoomXY.Y2));
CreadoJPG:=False; CreadoGIF:=False; C.Free;
PrimeraVez:=False; end;
Si solo quieres decrementar el tamaño que ocupa una imagen comprimela.
Saludos