【发布时间】:2022-01-29 00:00:44
【问题描述】:
我有以下代码
var rect = new Rectangle(x, y, w, h);
BitmapData data = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat);
BitmapSource cropppedImage;
if (data.Stride < 0)
{
cropppedImage = BitmapSource.Create(data.Width, data.Height, dpiX, dpiY,
GetPixelFormat(bitmap.PixelFormat), palette, data.Scan0 + data.Stride * data.Height, Math.Abs(data.Stride) * data.Height, Math.Abs(data.Stride));
}
else
{
cropppedImage = BitmapSource.Create(data.Width, data.Height, dpiX, dpiY,
GetPixelFormat(bitmap.PixelFormat), palette, data.Scan0, Math.Abs(data.Stride) * data.Height, Math.Abs(data.Stride));
}
其中 rect 完全在图像边界内。 根据 C# 文档,正 Stride 表示自上而下的图像,而负表示自下而上的图像。 BitmapData 的 Stride 成员如何以及为什么在图像的不同部分具有不同的符号?
据我了解(根据this 和this),一张图片可以是自上而下或自下而上的,但只能是其中一张。 在我的情况下,我有一张同时包含自上而下 AND 自下而上部分的图像。
但这怎么会发生呢?
【问题讨论】:
-
docs.microsoft.com/en-us/windows/win32/directshow/… 我认为同一张图片不太可能同时具有自上而下和自下而上的部分。
-
是的,这解释了两种不同的存储方法。但据我了解,一个 BITMAPINFOHEADER 告诉您 DIB 图像是自上而下或自下而上的,适用于整个图像。就我而言,我在一张图片中同时拥有自上而下和自下而上的部分。
-
我不确定,但也许在问题中澄清这一点以及显示您在图像的不同部分得到不同符号的代码。从这个问题中我不清楚你实际上为同一张图像得到了两个不同的标志。
-
好的,感谢您的反馈。
标签: c# bitmapdata