【发布时间】:2015-02-10 14:13:54
【问题描述】:
我有一个 BGR 格式和分辨率为 1920*1200 的位图,我想在不更改像素格式的情况下对其进行缩放。
private Bitmap rescale(Size size, Bitmap origin)
{
Bitmap scaled = new Bitmap(origin, size);
return scaled;
}
问题是,缩放后的结果是一个 RGBA 位图(所有 alpha 为 255),这不仅对我没用,而且也让我感到困扰,因为后来我在不同的图像上做 AbsDiff(来自 EMGU)和然后,alpha值总是为零.. 有没有办法在缩放时不更改像素格式或在没有 alpha 值的情况下执行 AbsDiff?因为像这样,当我稍后加载图像时,它是不可见的..
【问题讨论】:
-
应该有一个采用 PixelFormat 参数的构造函数重载。见msdn.microsoft.com/en-us/library/3z132tat%28v=vs.110%29.aspx
-
您可以创建具有所需像素格式和所需大小的目标,然后使用 Graphic.DrawImage 将缩放后的版本复制到目标中。
-
我建议使用 virusrocks 在他的回答中给出的重载。它会自动完成(至少这是 MSDN 声称的)。要手动执行此操作,您将从新位图创建一个 Graphics 对象,并使用它的 DrawImage 重载之一将原始图像绘制到新图像上。
-
virusrocks 在他的回答中使用的正是我尝试过的,但没有奏效..我现在尝试使用 Graphics 对象..