我想改变1024*768的很清晰的jpg图形的尺寸,可是出来以后清晰度很差,不知道我的代码有什么问题,请帮看看,谢谢! try
bmp:=tbitmap.Create;
t:=tbitmap.create;
jpg:=tjpegimage.Create; jpg.LoadFromFile(imagefile);
t.Assign(jpg);
bmp.Width:=160
bmp.Height:=120
bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,t.Canvas,t.Canvas.ClipRect); jpg.Assign(bmp); jpg.CompressionQuality:=100;
jpg.Compress;//以上两句有没有效果都一样。
sys_san.FileSetAttrEx(targetfile,32);
jpg.SaveToFile(targetfile); finally
bmp.Free;
jpg.Free;
t.free;
end;
bmp:=tbitmap.Create;
t:=tbitmap.create;
jpg:=tjpegimage.Create; jpg.LoadFromFile(imagefile);
t.Assign(jpg);
bmp.Width:=160
bmp.Height:=120
bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,t.Canvas,t.Canvas.ClipRect); jpg.Assign(bmp); jpg.CompressionQuality:=100;
jpg.Compress;//以上两句有没有效果都一样。
sys_san.FileSetAttrEx(targetfile,32);
jpg.SaveToFile(targetfile); finally
bmp.Free;
jpg.Free;
t.free;
end;
Windows提供给我们两个API函数,可以动态调整显示器的分辨率,他们是EnumDisplaySettings() 和ChangeDisplaySettings(),下面这个例子就是了
function DynamicResolution(X, Y: word): BOOL;
var
lpDevMode:
TDeviceMode;
begin
Result := EnumDisplaySettings(nil, 0, lpDevMode);
if Result then
begin
lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT;
lpDevMode.dmPelsWidth := X;
lpDevMode.dmPelsHeight := Y;
Result := ChangeDisplaySettings(lpDevMode, 0) = DISP_CHANGE_SUCCESSFUL;
end;
end;
procedure TForm1.Button1Click(Sender: Tobject);
//在delphi5+windows2000上通过。
begin
if DynamicResolution(640, 480) then
ShowMessage('Now is 640*480');
end;
procedure TForm1.Button2Click(Sender: Tobject);
begin
if DynamicResolution(800, 600) then
ShowMessage('Now is 800*600');
end;
bmp.Width:=160
bmp.Height:=120
bmp.Canvas.CopyRect(bmp.Canvas.ClipRect,t.Canvas,t.Canvas.ClipRect);
因为图像大小变化而像素会自动丢失
为什么不直接用scale呢?