2016-06-24 14 views
6
で0,0でそれを配置

私は、RGBAピクセルのリストからしたBitmapSourceを作成しました:私は、その後たBitmapSourceからイメージを作成画像をスケーリングし、WPF

BitmapSource bmp = BitmapSource.Create(imageStrideInPixels, height, 96, 96, PixelFormats.Bgra32, null, imageData, imageStrideInPixels * pixelWidth); 

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

Iキャンバスにイメージを追加してください:

問題は、imageScaleWidthとimageScaleHeightにスケーリングされていないことです。それはキャンバスの真下に表示されています。

注意、私がして、Java SWTでこれを行うことができました:

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

さらに、 'imageStrideInPixels'はビットマップの幅のためにかなり奇妙な名前ですが、' imageStrideInPixels/imageScaleWidth'と 'height/imageScaleHeight'の比率が等しいことを確認してください。さもなければ、イメージは拡大縮小されるだけでなく、伸ばされるべきです。 'BmpImg.Stretch = Stretch.Fill;'を設定する必要があります。 – Clemens

+0

あなたは実際に何かのキャンバスが必要ですか? –

+1

あなたの_java_タグが私にこれを見られないように、面白そうに思ったのですが、あなたがそれを除外している人が何人いるのだろうか... –

答えて

0

あなたは画像が途中キャンバスダウンしているといないキャンバス自体は親の中央に配置されてもよいですか?私はそれをテストし、キャンバスの親に対して垂直/水平の配置を設定することによってキャンバスの位置を制御できるように見えます。また、提供したコードを使用する際には、適切に拡大縮小されます。しかし私は別の方法でBitmapSourceを作成しました。適切にレンダリングする必要があり、この

 mycanvas.Background = new VisualBrush(BmpImg); 

これを試してみてください

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

代わりのこの

  mycanvas.Children.Add(BmpImg); 

:私は、次のコードを使用していました。

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オフセットで。

関連する問題