Tôi đã tạo ra BitMapSource từ một danh sách các RGBA pixel:Scaling một hình ảnh và định vị nó ở 0,0 trong WPF
BitmapSource bmp = BitmapSource.Create(imageStrideInPixels, height, 96, 96, PixelFormats.Bgra32, null, imageData, imageStrideInPixels * pixelWidth);
sau đó tôi tạo ra một hình ảnh từ 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;
tôi sau đó thêm Hình ảnh vào Canvas:
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);
Vấn đề là nó không được thu nhỏ thành hình ảnhScaleWidth và imageScaleHeight, và nó đang được hiển thị một nửa xuống khung vẽ.
Lưu ý, tôi đã có thể làm điều này trong Java SWT bởi:
imageData = imageData.scaledTo(imageScaleWidth, imageScaleHeight);
gc.drawImage(imageData, 0, 0);
Bên cạnh đó 'imageStrideInPixels' là tên lạ cho chiều rộng của bitmap, bạn có chắc rằng các tỷ lệ' imageStrideInPixels/imageScaleWidth' và 'height/imageScaleHeight' bằng nhau không? Nếu không, hình ảnh sẽ không chỉ được thu nhỏ, mà còn kéo dài. Sau đó bạn có thể phải đặt 'BmpImg.Stretch = Stretch.Fill;'. – Clemens
Bạn có thực sự cần canvas không? –
vui cách thẻ _java_ của bạn ngăn tôi nhìn thấy điều này, tôi tự hỏi có bao nhiêu người bạn đang loại trừ nó ... –