我尝试通过c#/ .NET中的TCP客户端缩放grey8图像以进行视频传输。 来自IpCam的我的图像目前是1920x1080,我想将其大小调整为640x480,以减少连接上的流量:
我在stackoverflow上找到了一个工作示例唯一的问题是..
public static Image ResizeImage(Bitmap image, Size size, bool preserveAspectRatio = true)
{
int newWidth;
int newHeight;
if (preserveAspectRatio)
{
int originalWidth = image.Width;
int originalHeight = image.Height;
float percentWidth = (float)size.Width / (float)originalWidth;
float percentHeight = (float)size.Height / (float)originalHeight;
float percent = percentHeight < percentWidth ? percentHeight : percentWidth;
newWidth = (int)(originalWidth * percent);
newHeight = (int)(originalHeight * percent);
}
else
{
newWidth = size.Width;
newHeight = size.Height;
}
Image newImage = new Bitmap(newWidth, newHeight);
using (Graphics graphicsHandle = Graphics.FromImage(newImage))
{
graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic; //NearestNeighbor
graphicsHandle.DrawImage(image, 0, 0, newWidth, newHeight);
}
return(newImage);
}
..我从这个函数得到的图像是一个32ARgb的图像,这不是我想要的。因为它引入了3个额外的颜色通道(Alpha和RBG)。 有没有办法在不改变颜色模式的情况下缩小图像?
我也试过使用InterpolationMode.NearestNeighbor但我只有一个32位的位图。
提前致谢和问候 罗伯特