Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Решетчатое изображение 
:(
    Опции темы
sunfish
Дата 6.2.2007, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



Народ, Помогите решить такую проблему.

При уменьшении изображения и последующем увеличении (или опять уменьшение идет, еще не понял) появляется эффект решетки (образец в прикрепленном файле)
уменьшение
Код

void CMyPicture::AddImagePrint(CImage *Img, int X_Begin, int Y_Begin, int Scale)
{
    int Width = Img->GetWidth();
    int Height = Img->GetHeight();

    int ScaleWidth = MulDiv(Width*Scale/100, 150, 96);
    int ScaleHeight = MulDiv(Height*Scale/100, 150, 96);

    int iX = MulDiv(X_Begin-m_MaskOffsetX, 150, 96);
    int iY = MulDiv(Y_Begin-m_MaskOffsetY, 150, 96);

    Img->StretchBlt(m_PrintImage.GetDC(), iX, iY, ScaleWidth, ScaleHeight,
        0, 0, Width, Height);

    m_PrintImage.ReleaseDC();
}

увеличение
Код

void CMyPicture::GetPrintType4 (CDC *pDC, int *pPos)
{
    int iCntX, iCntY, iPos = 0;
    int iPosX;
    int iPosY;

    int iX = m_PrintImage.GetWidth();
    int iY = m_PrintImage.GetHeight();

    int iRez_X = pDC -> GetDeviceCaps(LOGPIXELSX);
    int iRez_Y = pDC -> GetDeviceCaps(LOGPIXELSY);

    int iSize_X = MulDiv (m_PrintImage.GetWidth(), iRez_X, 150);
    int iSize_Y = MulDiv (m_PrintImage.GetHeight(), iRez_Y, 150);

    int iOffsetX = pDC -> GetDeviceCaps (PHYSICALOFFSETX);
    int iOffsetY = pDC -> GetDeviceCaps (PHYSICALOFFSETY);

    iOffsetX = MulDiv (iOffsetX, 254, iRez_X);
    iOffsetY = MulDiv (iOffsetY, 254, iRez_Y);

    HDC hDC = m_PrintImage.GetDC();

    for (iCntY = 0; iCntY < 3; iCntY++)
    {
        for (iCntX = 0; iCntX < 2; iCntX++)
        {
            iPosX = MulDiv (100 - iOffsetX + 900*iCntX, iRez_X, 254);
            iPosY = MulDiv (100 - iOffsetY + 900*iCntY, iRez_Y, 254);

            if (pPos[iPos++])
                StretchBlt (pDC->m_hDC, iPosX, iPosY, iSize_X, iSize_Y, hDC, 0, 0, iX, iY, SRCCOPY);
        }

    }    
    
    m_PrintImage.ReleaseDC();
}


Если на первом шаге, уменьшения нет (т.е. передается scale=100) то решетки нет (минимальное уменьшение - 60% - на нем проявляется).
Если все просто, не пинайте слишком - сами мы с линукса, к gdi не приученные :-)


Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  Paper_Weights___90_mm_circle_2.pdf 28,72 Kb
PM   Вверх
sunfish
Дата 6.2.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



если изоблажение на первом шаге уменьшать до 20%, то получается еще кривее - все цвета очень отличаются от оригинальных (как будто 256 цветов всего)
PM   Вверх
sunfish
Дата 6.2.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 5.2.2007

Репутация: нет
Всего: нет



проблема решена,
нужно при первом преобразовании вызывать SetStretchBltMode с HALFTONE
PM   Вверх
zkv
Дата 6.2.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(sunfish @  6.2.2007,  17:19 Найти цитируемый пост)
нужно при первом преобразовании вызывать SetStretchBltMode с HALFTONE 

я все думал, посоветовать или нет, но решил, что режим масштабирования не может так сильно сказаться на качестве изображения, да еще и так экзотично, удивительно smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.