Вывод изображения в масштабе 1:1 средствами GDI+
От: programme-soul  
Дата: 04.05.10 12:31
Оценка:
Здравствуйте!

Задача:
Нужно вывести изображение с его реальными длиной и шириной с помощью GDI+.

Вопрос:
Как это правильно сделать ?

Такой код выводит изображение, которое визуально кажется больше раза в 2, чем оригинал:
void 
CImageViewer::OnPaint(HDC& hdc)
{
    Graphics graphics(hdc);
    Image    image(L"g:\\_project\\image viewer\\ipcamera.jpg");

    graphics.DrawImage(&image, 0, 0);
}


Добавление этих строк тоже не меняет положение дел:
    graphics.SetPageUnit(UnitPixel);
    graphics.SetPageScale(1.0f);


Но если явно указать область вывода изображения, то оно отрисовывается в масштабе 1:1 (так же этот метод можно использовать для масштабирования, задавая область вывода больше)
void 
CImageViewer::OnPaint(HDC& hdc)
{
    Graphics graphics(hdc);
    Image    image(L"g:\\_project\\image viewer\\ipcamera.jpg");
    
    UINT width  = image.GetWidth();
    UINT height = image.GetHeight();

    Rect imageAreaRect(0, 0, width, height);

    graphics.DrawImage(
        &image,
        imageAreaRect,
        0, 0,
        width,
        height,
        UnitPixel);
}


Можно как-нибудь избежать этого шаманства?
Какие еще есть варианты вывода изображения в оригинальном размере?
Just programming soul
...who wants to know more
Re: Вывод изображения в масштабе 1:1 средствами GDI+
От: Guard_h4s Россия  
Дата: 04.05.10 13:13
Оценка:
Проблема в контексте, из которого был создан Graphics.
В подобном случае я использовал второй вариант: явно указал размеры.
Re[2]: Вывод изображения в масштабе 1:1 средствами GDI+
От: programme-soul  
Дата: 04.05.10 13:46
Оценка:
Здравствуйте, Guard_h4s, Вы писали:

G_>Проблема в контексте, из которого был создан Graphics.

G_>В подобном случае я использовал второй вариант: явно указал размеры.

Я тоже подумала, что проблема в контексте, поэтому и считаю, что нужно что-то сделать с ним, чтобы не было "казусов"...
GetMapMode возвращал мне MM_TEXT, поэтому вроде картинка должна была отображаться в реальном размере?!
Just programming soul
...who wants to know more
Re[3]: Вывод изображения в масштабе 1:1 средствами GDI+
От: Oleg Bekhter Украина www.bekhter.net
Дата: 09.05.10 17:11
Оценка:
Здравствуйте, programme-soul, Вы писали:

PS>Здравствуйте, Guard_h4s, Вы писали:


G_>>Проблема в контексте, из которого был создан Graphics.

G_>>В подобном случае я использовал второй вариант: явно указал размеры.

PS>Я тоже подумала, что проблема в контексте, поэтому и считаю, что нужно что-то сделать с ним, чтобы не было "казусов"...

PS>GetMapMode возвращал мне MM_TEXT, поэтому вроде картинка должна была отображаться в реальном размере?!
Разрешение экрана, как правило, 72 dpi, а в каком разрешениие JPEG?
Best regards,
Oleg Bekhter
Software Developer
Re[4]: Вывод изображения в масштабе 1:1 средствами GDI+
От: programme-soul  
Дата: 11.05.10 06:16
Оценка:
Здравствуйте, Oleg Bekhter, Вы писали:

OB>Разрешение экрана, как правило, 72 dpi, а в каком разрешении JPEG?


У картинки разрешение 72 dpi.
Just programming soul
...who wants to know more
Re[3]: Вывод изображения в масштабе 1:1 средствами GDI+
От: Guard_h4s Россия  
Дата: 11.05.10 06:57
Оценка:
Здравствуйте, programme-soul, Вы писали:

PS>Здравствуйте, Guard_h4s, Вы писали:


G_>>Проблема в контексте, из которого был создан Graphics.

G_>>В подобном случае я использовал второй вариант: явно указал размеры.

PS>Я тоже подумала, что проблема в контексте, поэтому и считаю, что нужно что-то сделать с ним, чтобы не было "казусов"...

PS>GetMapMode возвращал мне MM_TEXT, поэтому вроде картинка должна была отображаться в реальном размере?!
У меня такое ощущение, что гораздо проще всегда выводить картинку в нужный прямоугольник.
Re[4]: Вывод изображения в масштабе 1:1 средствами GDI+
От: saf_e  
Дата: 18.05.10 15:16
Оценка:
Здравствуйте, Oleg Bekhter, Вы писали:

OB>Здравствуйте, programme-soul, Вы писали:


PS>>Здравствуйте, Guard_h4s, Вы писали:


G_>>>Проблема в контексте, из которого был создан Graphics.

G_>>>В подобном случае я использовал второй вариант: явно указал размеры.

PS>>Я тоже подумала, что проблема в контексте, поэтому и считаю, что нужно что-то сделать с ним, чтобы не было "казусов"...

PS>>GetMapMode возвращал мне MM_TEXT, поэтому вроде картинка должна была отображаться в реальном размере?!
OB>Разрешение экрана, как правило, 72 dpi, а в каком разрешениие JPEG?

Как правило 96 (для экрана на Винде всегда, GDI+ вин онли).


>Здравствуйте, Oleg Bekhter, Вы писали:


>OB>Разрешение экрана, как правило, 72 dpi, а в каком разрешении JPEG?


>У картинки разрешение 72 dpi.


Как вариант попробуйте SetPageUnit(UnitPixel), скорее всего проблема именно в различных разрешениях (dpi).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.