2016-06-24 30 views
6
yılında 0,0 konumlandırarak

Ben RGBA piksel listeden BitmapSource yarattık: Sonra BitmapSource bir resim oluşturmakGörüntü ölçeklendirme ve 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; 

ben sonra Tuval'e Resmi ekleyin:

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

sorun imageScaleWidth ve imageScaleHeight ölçeklendirilir almıyor yani, ve tuvalin yarısına kadar gösteriliyor.

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

Ayrıca, "imageStrideInPixels" bitmap'in genişliği için oldukça garip bir addır, "imageStrideInPixels/imageScaleWidth" ve "height/imageScaleHeight" oranlarının eşit olduğundan emin misiniz? Aksi takdirde görüntü sadece ölçeklendirilmemeli, aynı zamanda gerilmeli. Daha sonra 'BmpImg.Stretch = Stretch.Fill;' – Clemens

+0

Tuval için bir şeye ihtiyacın var mı? –

+1

, _java_ etiketinizin bunu görmemi nasıl engellediğini merak ediyorum. –

cevap

0

görüntü ailesindeki tuval değil tuval kendisi yarım aşağı ortalanır emin misiniz:

Not, ben tarafından Java SWT bunu başardı? Bunu test ettim ve tuvalin üst tarafındaki dikey/yatay hizalamayı ayarlayarak tuval konumunu kontrol edebildiğiniz görülüyor. Sağladığınız kodu kullanırken de ölçeklendirir. Ancak bir BitmapSource'ı farklı bir şekilde oluşturdum. düzgün oluşturulacağı bu

 mycanvas.Background = new VisualBrush(BmpImg); 

Bu deneyin

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

yerine bu

  mycanvas.Children.Add(BmpImg); 

: Aşağıdaki kodu kullanılır.

3

Bir ScaleTransform kullanarak görüntünüzü ölçeklendirebilirsiniz: Resim konumlanacak olan

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

Not varsayılan olarak 0, 0 ofset de.