我試圖使用Win2D/C#使用高射投影儀投影圖像,並且我需要使用Win2D效果來做Keystone Correction(預翹圖像)作爲最後一步。Win2D Keystone Correction
基本上我畫了一個矩形,然後嘗試使用Transform3DEffect在渲染前對其進行變形。我無法弄清楚使用什麼Matrix轉換組合來實現它。做一個完整的相機投影似乎是矯枉過正,因爲我只需要在一個方向上扭曲(見下圖)。我應該使用什麼變換?
我試圖使用Win2D/C#使用高射投影儀投影圖像,並且我需要使用Win2D效果來做Keystone Correction(預翹圖像)作爲最後一步。Win2D Keystone Correction
基本上我畫了一個矩形,然後嘗試使用Transform3DEffect在渲染前對其進行變形。我無法弄清楚使用什麼Matrix轉換組合來實現它。做一個完整的相機投影似乎是矯枉過正,因爲我只需要在一個方向上扭曲(見下圖)。我應該使用什麼變換?
使用像下面的圖片,可以讓你類似的效果。
https://i.stack.imgur.com/5QnEm.png
我不確定在 「彎曲」 什麼樣的結果。
創建位移貼圖的代碼(使用GDI +,因爲您可以快速設置像素)。 的LockBitmap你可以找到here
static void DrawDisplacement(int width, int height, LockBitmap lbmp)
{
for (int x = 0; x < width; x++)
for (int y = 0; y < height; y++)
{
int roff = (int)((((width >> 1) - x)/(float)(width >> 1)) * ((height - y)/(float)height) * 127);
int goff = 0;
lbmp.SetPixel(x, y, Color.FromArgb(127 - roff, 127 - goff, 0));
}
}
年畫Win2D看起來像這樣,在displacementImage是加載的文件和屏幕外,是一個「CanvasRenderTarget」上,我畫了電網。
//Scaling for fitting the image to the content
ICanvasImage scaledDisplacement = new Transform2DEffect
{
BorderMode = EffectBorderMode.Hard,
Source = displacementImage,
TransformMatrix = Matrix3x2.CreateScale((float) (sender.Size.Width/displacementImage.Bounds.Width), (float) (sender.Size.Height/displacementImage.Bounds.Height)),
Sharpness = 1f,
BufferPrecision = CanvasBufferPrecision.Precision32Float,
InterpolationMode = CanvasImageInterpolation.HighQualityCubic,
};
//Blurring, for a better result
ICanvasImage displacement = new GaussianBlurEffect
{
BorderMode = EffectBorderMode.Hard,
Source = scaledDisplacement,
BufferPrecision = CanvasBufferPrecision.Precision32Float,
BlurAmount = 2,
Optimization = EffectOptimization.Quality,
};
ICanvasImage graphicsEffect = new DisplacementMapEffect
{
Source = offscreen,
Displacement = displacement,
XChannelSelect = EffectChannelSelect.Red,
YChannelSelect = EffectChannelSelect.Green,
Amount = 800,//change for more or less displacement
BufferPrecision = CanvasBufferPrecision.Precision32Float,
};
我認爲這種技術對於我來說有一個不同的(更簡單的)位移圖像。謝謝。 – user1346563
主要問題是,Transform3DEffect不會添加透視圖。所以我認爲你不能這樣做。 (就我的想法而言,我沒有時間進一步調查...... atm)。還有一個想法:你可能可以通過置換貼圖來解決這個問題。 – AntiHeadshot