![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]() Код:
Код:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ Последний раз редактировалось Alex Cones; 22.07.2010 в 09:38. |
![]() |
![]() |
![]() |
#2 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Сделал другой вариант, та же проблема:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#3 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Первое чтобы я сделал, это поменял бы Image на PaintBox. Высокоуровневость Image часто только мешает и выражается в подобных багах, и в потере времени на их поиск. PaintBox же простой как три копейки, и делает только то что ты ему говоришь, добавить только процедуру его обновления (PaintBox.OnPaint) чтобы не пропадал когда не надо, но рисовать нужно непосредственно в нем, а не через обновление, а то мерцать будет, обновление пусть вызывается только системой.
Второе что я заметил, это заливка белым цветом в цикле, очень неэффективно. Делай просто FillRect(ClientRect), будет на порядок быстрее. Я так понял, пытаешься масштабирование замутить? Для квадратиков конечно и так сойдет, но для более сложных картинок, чтобы было красиво, нужна интерполяция, не так просто. Я на опыте уже убедился, если под Винду, то апишный StretchBlt хорошо это делает. Дельфийские процедуры масштабирования работают хуже по качеству. А если самому, и хочешь качество, в сети есть алгоритмы (Scaling поищи). PS Кстати, в рамках обмена опыта не объяснишь, что тут происходит? (не дружу я с математикой) ![]() Zoom := Round(Exp(FRMMain.RG2.ItemIndex * Ln(2))); PSS Как я и предполагал, замена на PaintBox решила проблему (код ниже). Либо замени, либо поколдуй над имиджом. Просто менять размеры мало, я не помню чего уж там ему не хватает, но что-то еще нужно сделать. Можешь просто присвоить свой битмап ему на битмап: Image.Bitmap := Bitmap; И автосайз задай ему, чтобы не менять размеры каждый раз явно. Так должно работать как надо. Код:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 22.07.2010 в 11:05. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 28.03.2007
Сообщений: 1,814
|
![]()
Да и StrechDraw неплохо работает у того же имиджа
|
![]() |
![]() |
![]() |
#5 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]() Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
![]() |
![]() |
![]() |
#6 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
![]()
Я все таки нашел решение для имаджа - просто, как все гениальное:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
![]() |
![]() |
![]() |
#7 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Правильнее было бы так (автосайз должен быть задан имиджу):
FRMMain.IMGMain.Picture.Bitmap := BitZ; И больше ничего не надо делать, изображение появится само. А если BitZ уже был назначен имиджу, даже и этого делать не надо, тогда либо просто обновить его, либо он даже сам может среагировать на изменения в битмапе, нужно пробовать. Кстати если ты будешь манипулировать битмапом имиджа, имей ввиду, ты манипулируешь на самом деле тем битмапом к-рый ранее назначил (присвоил свойству Bitmap) ему. Т.е. например, такой код: Image.Canvas.Draw(0, 0, SomeBitmap); может означать копирование самого в себя. Если до этого ссылка на SomeBitmap была присвоена в Picture.Bitmap. Вношу поправку, это все не так. Image содержит независимый объект TBitmap, проверил адреса специально, и при присваивании скорее всего происходит неявное (код инкапсулирован где-то внутри имиджа) копирование битов одного битмапа в другой.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 22.07.2010 в 13:30. |
![]() |
![]() |
![]() |
#8 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
![]()
Вот самый простой вариант с TImage
Код:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Графический редактор - zoom(лупа), Delphi | vitalatron | Помощь студентам | 11 | 18.07.2012 10:12 |
Canvas | ZET78 | C++ Builder | 5 | 21.05.2010 20:26 |
Delphi. Печать. Не работает Printer.Canvas.TextOut | Alexander Karpenko | Общие вопросы Delphi | 4 | 02.03.2010 23:39 |
TP7 чтение из файла, работает но не работает!? | Qousio | Помощь студентам | 7 | 02.06.2009 09:37 |
Библиотека НЕ работает с 2008, но работает с 2000 SQL | namenike | Общие вопросы C/C++ | 0 | 26.05.2009 11:04 |