Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрейшее .. Как быстро вывести рисунок на форму 
:(
    Опции темы
ShuVaS
Дата 24.1.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Короче в моей проге есть фоновый рисунок мне нада чтобы этот рисунок выводился как можно скорее и тратил как можно мньше памяти и не тормозил систему.И еще я юзаю Xp манифест (Delphi 7) Проблемки - у меня то фон пропадает то еще че нить .... (нада мне єтот манифест таскать или просто на форму кинуть ?).И последнее - при изменении размеров формы у меня остаютьсянеприятные еффекты от старого рисунка -- как обновить форму ... smile
PM MAIL WWW ICQ   Вверх
s-mike
Дата 24.1.2005, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ShuVaS @ 24.1.2005, 21:13)
И последнее - при изменении размеров формы у меня остаютьсянеприятные еффекты от старого рисунка  -- как обновить форму ... smile

Код

procedure TForm1.FormResize(Sender: TObject);
begin
 Perform(WM_PAINT, Canvas.Handle, 0);
end;

Добавлено @ 22:27
Цитата(ShuVaS @ 24.1.2005, 21:13)
мне нада чтобы этот рисунок выводился как можно скорее и тратил как можно мньше памяти и не тормозил систему

Быстрее BitBlt при использовании GDI (стандартных виндовых окошек) еще не придумали.
Добавлено @ 22:29
Цитата(ShuVaS @ 24.1.2005, 21:13)
(нада мне єтот манифест таскать или просто на форму кинуть ?)

Без разницы. Только в Win9x-2000 размер файла будет больше на несколько Кб ненужного кода, если использовать компонент.

Это сообщение отредактировал(а) s-mike - 24.1.2005, 22:26
PM MAIL WWW   Вверх
ShuVaS
Дата 25.1.2005, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А по подробней на счет вывода графики можно ?Стоит ли юзать Image ?Мне нада чтобі еще желательно можно біло изображение натянуть(если не использовать Image -говорят медленно)И Еще мож не по теме токо из-за этого создавать топик не охота - Application.ProcessMEssages - его один раз в процедуре надо ставить:

Код

procedure TfrMain.btnPlayClick(Sender: TObject);
begin
Application.ProcessMessages;
if Player.Tag=1 then
  begin Player.Pause;
        Player.Tag:=0;
  end
  else
   begin if OpenDialog1.Execute then
     begin
      Player.FileName := OpenDialog1.Filename;
      Label1.Caption  := ExtractFileName(OPendialog1.Filename);
      TrackBar1.SliderVisible :=true;
      btnPause.Enabled:= true;
   with Player do
         begin
          Open;
        TrackBar1.Max:=Player.TrackLength[0];
          Play;
        end;
  Timer1.Enabled  := true;
  IsOn:=true;
  InitWaveIn(true);
  end;
end;
end;


или после каждогособытия?Если один раз - то где (в самом конце или в начале)....

Это сообщение отредактировал(а) ShuVaS - 25.1.2005, 00:25
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 25.1.2005, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата(s @ 24.1.2005, 22:25)
Быстрее BitBlt при использовании GDI (стандартных виндовых окошек) еще не придумали.
Это верно.

Но нужно заметить, что но не стоит бросать VCL и переходить на WinAPI/GDI, и не стоит замудрять голову смешиванием VCL и WinAPI, т.к. VCL всё равно в итоге работает через эти же функции. "Надстройка" сжирает очень-очень мало. Даже если в цикле тысячи раз вызвать BitBlt и сравнить с Canvas.Draw, то разница будет настолько малозначительной, что принимать во внимание её не имеет смысла.

Более важную роль при копировании изображения играет формат пикселя. Неправильный выбор формата может привести к замедлению в десятки раз (!).
Правильным же подходом является хранение изображения в памяти в формате, идентичном формату контекста, куда будет выводится картинка. Иначе при каждом копировании будет происходить преобразование исходного изображения к нужному формату, поэтому если нужно выводить картинку часто, то лучше сразу привести её к нужному виду... Это делается довольно легко. Например, если картинку выводишь на экран, то нужно делать так:
Код
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(<имя файла>);
Bitmap.HandleType := bmDDB; // вот она, главная строчка
(или вместо последней строчки: Bitmap.PixelFormat := pfDevice;)
Это как минимум ускорит вывод битмапа на экран раза в 2-3...


--------------------
С уважением, г-н Посол.
PM   Вверх
ShuVaS
Дата 25.1.2005, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а как мне напримар вывести ???через Canvas.Draw или через что ???? и на счет Application.ProcessMessages - я спрашую вообще как надо ставить -один раз или несколько в процедуре ?

Это сообщение отредактировал(а) ShuVaS - 25.1.2005, 15:48
PM MAIL WWW ICQ   Вверх
p0s0l
Дата 25.1.2005, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

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



Цитата(ShuVaS @ 25.1.2005, 15:04)
Application.ProcessMessages - я спрашую вообще как надо ставить -один раз или несколько в процедуре ?
А зачем тебе его вообще ставить ? Глядел-глядел, и так и не разглядел, зачем он тут нужен... Ни циклов, ни долгих операций вроде нет...





--------------------
С уважением, г-н Посол.
PM   Вверх
ShuVaS
Дата 25.1.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



г-н Посол вы не множко не поняли ...Я попросил обьснить как работает Application.ProcessMasseges - что бы он работал его нада ставить после ресурсоемкой строчки до нее или вообще один раз в начале (или в конце)...
Насчет рисунка - подскажите наибыстрейший и удобный формат *.bmp или *.jpg .. (учитывая что второй можно сжать легко до 30-40 kb)..И как наконец вывести ето изображение ....(желательно полный код - а то я не понимаю чуток (естественно что это было как можно быстрее и оптимизированнее)...
И как обновить окно формы ???(если я хочу просто нажать на кнопку...)


P.s - Вот вроде и все
PM MAIL WWW ICQ   Вверх
ДЫМ
Дата 27.1.2005, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Я попросил обьснить как работает Application.ProcessMasseges - что бы он работал его нада ставить после ресурсоемкой строчки до нее или вообще один раз в начале (или в конце)...


Насколько я понял, ты хочешь, чтобы во время загрузки большого файла контролы реагировали на твои действия. Так вот, ProcessMasseges не поможет, придется сидеть и смотреть на "песочные часы"

Цитата

Насчет рисунка - подскажите наибыстрейший и удобный формат *.bmp или *.jpg .. (учитывая что второй можно сжать легко до 30-40 kb)..


Если у тебя большой рисунок, то вывод *.jpg займет заметно больше времени (я проверял). Так, что если так важна скорость, то используй формат *.bmp

А так можно заполнить фон
Код


var
  BitmapBkg:TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin
BitmapBkg:=TBitmap.Create;
BitmapBkg.LoadFromFile('background.bmp');
Canvas.Brush.Bitmap:=BitmapBkg;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.FillRect(ClientRect);
end;




Это сообщение отредактировал(а) ДЫМ - 27.1.2005, 02:59
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




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


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

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