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

时间:2016-06-24 13:47:59

标签: java c# wpf swt scaling

我已经从RGBA像素列表中创建了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;

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

                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);

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

imageData = imageData.scaledTo(imageScaleWidth, imageScaleHeight);
gc.drawImage(imageData, 0, 0); 

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

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

{{1}}

3 个答案:

答案 0 :(得分:3)

您可以使用ScaleTransform

缩放图片
// scale the original bitmap source
var transformedBitmap = new TransformedBitmap(
    bmp, 
    new ScaleTransform(
        imageScaleWidth / (double) bmp.PixelWidth, 
        imageScaleHeight / (double) bmp.PixelHeight));

// create image and set image as source
Image bmpImg = new Image();
bmpImg.SetValue(Canvas.ZIndexProperty, 0);
bmpImg.Source = transformedBitmap;

mycanvas.Width = imageScaleWidth;
mycanvas.Height = imageScaleHeight;
mycanvas.Children.Clear();
mycanvas.Children.Add(bmpImg);

请注意,默认情况下,您的图片将定位在偏移0,0处。

答案 1 :(得分:1)

而不是这个

            mycanvas.Children.Add(BmpImg);

试试这个

       mycanvas.Background = new VisualBrush(BmpImg);

这应该正确呈现。

答案 2 :(得分:0)

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

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