Сообщение Re[5]: Масштабирование битмапа : GDI+ от 14.01.2017 9:51
Изменено 14.01.2017 9:56 MTimur
Re[5]: Масштабирование битмапа : GDI+
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, MTimur, Вы писали:
MT>>[/cut]
MT>>Посмотреть бы результат (исходная картинка, scale, результирующая)
MT>>ScaleTransform создает матрицу преобразования для всей сцены. Вероятно, масштабирование происходит вокруг центра битмапа, соответственно левый верхний угол смещается. Если так, то нужно юзать TranslateTransform.
C>Тут бинарник http://www.amlpages.com/Source/richedit_test.zip
C>При старте сразу вставляет битмапку в CRichEditView, и стартует диалог ресайза. Там можно поиграться. Изменяем ширину, софтина перерассчитывает длину и пытается создать новый битмап на основе старого отмасштабированного по новой длине и ширине. Ну и изменяет высоту, тогда все наоборот — вычисляет ширину на основе новой высоты и.т.д…
Так это элементарный случай, можно проще:
Без всяких матриц преобразований.
как то так
C>Здравствуйте, MTimur, Вы писали:
MT>>[/cut]
MT>>Посмотреть бы результат (исходная картинка, scale, результирующая)
MT>>ScaleTransform создает матрицу преобразования для всей сцены. Вероятно, масштабирование происходит вокруг центра битмапа, соответственно левый верхний угол смещается. Если так, то нужно юзать TranslateTransform.
C>Тут бинарник http://www.amlpages.com/Source/richedit_test.zip
C>При старте сразу вставляет битмапку в CRichEditView, и стартует диалог ресайза. Там можно поиграться. Изменяем ширину, софтина перерассчитывает длину и пытается создать новый битмап на основе старого отмасштабированного по новой длине и ширине. Ну и изменяет высоту, тогда все наоборот — вычисляет ширину на основе новой высоты и.т.д…
Так это элементарный случай, можно проще:
g.DrawImage(&im, rcDest);
Без всяких матриц преобразований.
как то так
Re[5]: Масштабирование битмапа : GDI+
Здравствуйте, Carc, Вы писали:
C>Здравствуйте, MTimur, Вы писали:
MT>>[/cut]
MT>>Посмотреть бы результат (исходная картинка, scale, результирующая)
MT>>ScaleTransform создает матрицу преобразования для всей сцены. Вероятно, масштабирование происходит вокруг центра битмапа, соответственно левый верхний угол смещается. Если так, то нужно юзать TranslateTransform.
C>Тут бинарник http://www.amlpages.com/Source/richedit_test.zip
C>При старте сразу вставляет битмапку в CRichEditView, и стартует диалог ресайза. Там можно поиграться. Изменяем ширину, софтина перерассчитывает длину и пытается создать новый битмап на основе старого отмасштабированного по новой длине и ширине. Ну и изменяет высоту, тогда все наоборот — вычисляет ширину на основе новой высоты и.т.д…
Так это элементарный случай, можно проще:
Без всяких матриц преобразований.
ps как то так
pps И да, судя по результату, я бы смотрел код, который копирует отмасштабированный битмап на окно, а не код ресайза.
C>Здравствуйте, MTimur, Вы писали:
MT>>[/cut]
MT>>Посмотреть бы результат (исходная картинка, scale, результирующая)
MT>>ScaleTransform создает матрицу преобразования для всей сцены. Вероятно, масштабирование происходит вокруг центра битмапа, соответственно левый верхний угол смещается. Если так, то нужно юзать TranslateTransform.
C>Тут бинарник http://www.amlpages.com/Source/richedit_test.zip
C>При старте сразу вставляет битмапку в CRichEditView, и стартует диалог ресайза. Там можно поиграться. Изменяем ширину, софтина перерассчитывает длину и пытается создать новый битмап на основе старого отмасштабированного по новой длине и ширине. Ну и изменяет высоту, тогда все наоборот — вычисляет ширину на основе новой высоты и.т.д…
Так это элементарный случай, можно проще:
g.DrawImage(&im, rcDest);
Без всяких матриц преобразований.
ps как то так
pps И да, судя по результату, я бы смотрел код, который копирует отмасштабированный битмап на окно, а не код ресайза.