Какую функцию Gdiplus :: Graphics :: DrawImage я должен использовать? - PullRequest
0 голосов
/ 18 февраля 2011

Я хочу вставить (x, y, w, h) под прямоугольник из src в dest, чтобы исходный пиксель (x, y) отображался как пиксель (0,0) dest. Мне трудно решить, какая из перегруженных газиллионов делает это. Прямо сейчас мой код выглядит так, что, очевидно, не работает:

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc()));
g->DrawImage(png, r.top, r.bottom, r.Width(), r.Height());
g->Flush(); 

Это не работает, потому что (x, y) исходный пиксель отображается как (x, y) целевой пиксель, тогда как я хочу, чтобы он отображался как (0,0) целевой пиксель. Прямоугольники источника и назначения должны иметь одинаковый размер, но разные смещения вместо одного и того же смещения.

[Изменить] Неважно, я нашел перегруженную функцию, которая мне нужна. Все повороты, которые мне нужно было добавить, - это смещение пункта назначения (x, y) впереди и UnitPixel в конце.

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc()));
g->DrawImage(png, 0, 0, r.left, r.top, r.Width(), r.Height(), Gdiplus::UnitPixel);
g->Flush();

1 Ответ

0 голосов
/ 18 февраля 2011

Любой будет работать, они работают одинаково хорошо. Они в основном просто псевдонимы друг для друга. Я предполагаю, что вы используете этот , который гласит:

x [in] REAL Действительное число, которое указывает X-координата верхнего левого угол прямоугольника назначения в который нарисовать изображение.

y [in] REAL Действительное число, которое указывает Y-координата верхнего левого угол прямоугольника назначения в который нарисовать изображение.

Попробуйте вместо этого установить значения x и y равными 0, чтобы вызов стал:

auto_ptr<Gdiplus::Graphics> g(Gdiplus::Graphics::FromHDC(pDC->GetSafeHdc()));
g->DrawImage(png, 0, 0, r.Width(), r.Height());
g->Flush();

В остальном вы должны были бы быть более точными в отношении того, что "не работает". Это неправильно нарисовано? Разве это не нарисовано вообще? Правильно ли загружен png? Если ничего не нарисовано, я предлагаю вам проверить возвращаемое значение (которое является Status ) от DrawImage, которое должно указать вам правильное направление.


EDIT

Хорошо, так что если вы не хотите, чтобы он отображался как src (0, 0) в dest (0, 0), я думаю, вы могли бы использовать этот вместо этого. Это позволит вам решить

src [x | y] [in] REAL Действительное число, которое задает [x | y] -координату верхний левый угол части исходное изображение для рисования.

Надеюсь, это поможет.

...