【问题标题】:White image when resizing Tbitmap调整 Tbitmap 大小时的白色图像
【发布时间】:2019-09-01 09:54:21
【问题描述】:

此代码应该调整TBitmap 的大小,但生成的位图只是一个白色图像(具有最终大小)。我正在使用它来调整大小。

function ResizeBitmap(B: TBitmap; Width, Height: Integer): TBitmap;
var
  finalbitmap: TBitmap;
begin
  finalbitmap := TBitmap.Create(Width, Height);
  finalbitmap.Clear(0);
  if finalbitmap.Canvas.BeginScene then
  try 
    finalbitmap.Canvas.DrawBitmap(B, RectF(0,0,B.Width,B.Height), RectF(0,0,Width,Height), 1);
  finally
    finalbitmap.Canvas.EndScene;
  end;
  Result := finalbitmap;
end;

知道发生了什么吗?

【问题讨论】:

  • Clear() 仍然是一个绘图操作,因此它应该在(Begin|End)Scene() 之间调用。不过,这并不重要,因为DrawBitmap() 只会绘制所有Clear() 会绘制的东西,所以根本不需要调用Clear(),除非B 具有透明度并且你想要@ 987654329@也有透明度。但是,您是否确认 BeginScene() 在您的情况下没有返回 False?
  • 是的,我已经验证过了。该过程进入 if 所以 BeginScene 返回 True。
  • 在我做的一个简单测试中,我无法重现该问题。还请显示调用ResizeBitmap()的代码
  • 我看到了你之前添加的代码,我自己复制了下来,以便以后测试。现在我看到您已经删除了带有代码的注释。这是否意味着您自己找到了解决方案?如果是这样,如果 q/a 对其他读者有益,那么正确的做法是回答您自己的问题。另一方面,如果问题是愚蠢的错误或错误,那么正确的做法是也删除问题。如果您无法删除(由于声誉不足),请告诉我们,这里有人可以关闭它。 (顺便说一句,图像类型不兼容的原因是什么,png v. bmp?)
  • 没有,但是我遇到了另一个问题,我认为它与此有关...所以我想在浪费您的时间之前尝试一下...但没有解决...

标签: delphi firemonkey delphi-10.3-rio tbitmap


【解决方案1】:

最后我修改了 php 来调整上传图片的大小。我不知道我的 delphi 代码出了什么问题。

<?php 
$uploaddir = strval($_GET['dir']); 
$newwidth = strval($_GET['newwidth']); 
$newheight = strval($_GET['newheight']); 
$uploadfile = $uploaddir . basename( $_FILES['file']['name']); 
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
$sourceProperties = getimagesize($uploadfile);
$fileNewName = $_FILES['file']['name'];
$imageType = $sourceProperties[2];
$imageResourceId = imagecreatefrompng($uploadfile); 
$targetLayer = imageResize($imageResourceId,$sourceProperties[0],$sourceProperties[1],$newwidth,$newheight);
imagepng($targetLayer,$uploaddir. "thumb". $fileNewName);
move_uploaded_file($uploadfile, $uploaddir. $fileNewName. ".". "png");

function imageResize($imageResourceId,$width,$height,$twidth,$theigth) {
    $targetWidth =$twidth;
    $targetHeight =$theigth;
    $targetLayer=imagecreatetruecolor($twidth,$theigth);
    imagecopyresampled($targetLayer,$imageResourceId,0,0,0,0,$twidth,$theigth, $width,$height);
    return $targetLayer;
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    相关资源
    最近更新 更多