Нарисуйте растровое изображение на окне в wpf

Я новичок в WPF.

Я реализовал код в mfc, который загружает растровое изображение и рисует его в окне, теперь хочу перенести аналогичную функциональность в WPF.

Я хочу нарисовать растровое изображение в моем окне WPF и выполнить некоторые операции. Окно не будет иметь кнопки min, max, close.

ниже мой код MFC.

LRESULT Mywindow::OnPaint(UINT, WPARAM, LPARAM, BOOL&)
        {
            CPaintDC dc(this);
        CDC cdc;
        HDC hdc = dc.GetSafeHdc();
        cdc.Attach(hdc);
        paintBitmapOnWindow(&cdc);
        }

    void Mywindow::paintBitmapOnWindow(CDC* pCdc)
    {
         HBITMAP backgroundBitmap;
        backgroundBitmap = (HBITMAP)::LoadImage(0, _T("C:\\temp.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
        CDC cdcCompatible;
        cdcCompatible.CreateCompatibleDC(pCdc);
        cdcCompatible.SelectObject(backgroundBitmap);

        CRect clientRect;
        GetClientRect(clientRect);

        int clientHalfWidth = 800 / 2;
        CRect clientLeft;
        CRect imageLeft;
        BITMAP bm;
        ::GetObject(backgroundBitmap, sizeof(BITMAP), (PSTR)&bm);

        clientLeft.SetRect(clientRect.left, clientRect.top, clientRect.left + clientHalfWidth, clientRect.bottom);

        int bitmapHalfWidth = bm.bmWidth / 2;
        int bitmapLeftOffset = bitmapHalfWidth - 0;

        imageLeft.SetRect(bitmapLeftOffset - clientLeft.Width(), 0, bitmapLeftOffset, bm.bmHeight);

        pCdc->StretchBlt(clientLeft.left, clientLeft.top, clientLeft.Width(), clientLeft.Height(), &cdcCompatible,
            imageLeft.left, imageLeft.top, imageLeft.Width(), imageLeft.Height(), SRCCOPY);
        cdcCompatible.DeleteDC();
    }

Каковы аналогичные функции / класс, который я могу использовать, чтобы преобразовать его в WPF?

1 ответ

Решение

Если вы хотите перетаскивать растровое изображение прямо в окно и хотите напрямую управлять рендерингом, вы можете просто переопределить функцию OnRender. Однако есть подвох (отмечено в комментариях к коду)...

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.Background = Brushes.Transparent;  // <-- necessary  (strange bug)
        // Charles Petzold writes about this at the following link:
        // http://social.msdn.microsoft.com/Forums/vstudio/en-US/750e91c2-c370-4f0a-b18e-892afd99bd9b/drawing-in-onrender-beginnerquestion?forum=wpf
    }

    protected override void OnRender(DrawingContext drawingContext)
    {
        base.OnRender(drawingContext);
        BitmapSource bitmapSource = new BitmapImage(new Uri("C:\\Temp.png", UriKind.Absolute));
        CroppedBitmap croppedBitmap = new CroppedBitmap(bitmapSource, new Int32Rect(20, 20, 100, 100));
        drawingContext.DrawImage(croppedBitmap, new Rect(0.0d, 0.0d, this.RenderSize.Width / 2.0d, this.RenderSize.Height));
    }
}
Другие вопросы по тегам