缩放图像并将其定位在WPF中的0,0

Rob*_*boy 6 c# java wpf scaling swt

我从RGBA像素列表中创建了BitMapSource:

BitmapSource bmp = BitmapSource.Create(imageStrideInPixels, height, 96, 96, PixelFormats.Bgra32, null, imageData, imageStrideInPixels * pixelWidth);  
Run Code Online (Sandbox Code Playgroud)

然后我从BitMapSource创建一个图像:

    // create image and set image as source
    Image BmpImg = new Image();
    BmpImg.SetValue(Canvas.ZIndexProperty, 0);
    BmpImg.Width = imageScaleWidth;
    BmpImg.Height = imageScaleHeight;
    BmpImg.Source = bmp;
Run Code Online (Sandbox Code Playgroud)

然后我将图像添加到画布:

                mycanvas.Width = imageScaleWidth;
                mycanvas.Height = imageScaleHeight;
                mycanvas.Children.Clear();
                mycanvas.Children.Add(BmpImg);
                Canvas.SetLeft(BmpImg, 0);  // to set position (x,y)
                Canvas.SetTop(BmpImg, 0);
Run Code Online (Sandbox Code Playgroud)

问题是它没有缩放到imageScaleWidth和imageScaleHeight,而是显示在画布的一半.

注意,我能够通过以下方式在Java SWT中执行此操作:

imageData = imageData.scaledTo(imageScaleWidth, imageScaleHeight);
gc.drawImage(imageData, 0, 0); 
Run Code Online (Sandbox Code Playgroud)

小智 0

您确定图像位于画布的中间,而不是画布本身位于其父级的中心吗?我测试了它,看来您可以通过在画布的父级上设置垂直/水平对齐来控制画布位置。而且在使用您提供的代码时它也可以正确缩放。不过,我以不同的方式创建了 BitmapSource。我使用了以下代码:

PngBitmapDecoder decoder = new PngBitmapDecoder(new Uri(@"..."), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bmp = decoder.Frames[0];
Run Code Online (Sandbox Code Playgroud)