我已经从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}}
答案 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];