Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Вниз

Преобразование картинок   Найти похожие ветки 

 
Fostr   (2005-09-24 22:07) [0]

Здравствуйте! Есть две картики (Jpg). Моя задача сделать плавный переход одной картики в другую. С помощью доступа к пикселям (MyPic.Canvas.Pixels[x,y]) эта задача работает чрезвычайно медленно. Знаю, что ScanLine решает подобные проблемы со коростью. Вопрос: пожалуйста, подскажите как именно можно решить задачу с помощью ScanLine?


 
PAVIA ©   (2005-09-24 22:37) [1]

Запомни есть кнопка F1 Help называеться, по русски будет справка.
type
 TRGB=record r,g,b:byte; end;
 PRGBArray = ^TByteArray;
 TRGBArray = array[0..32767] of TRGB;
//...
var p:PRGBArray;
//...
//тут загрузка картинки преоброзование ее в BMP 24bit
//...

 for y := 0 to Bitmap.height -1 do
   begin
     P := Bitmap.ScanLine[y];
     for x := 0 to Bitmap.width -1 do
       begin
       P[x]-лежит цвет. Делаешь свои преоброзования.
       end;
   end;

ScanLine выигрывает за счет, того что каждый раз не нужно преводить координаты x,y в линейный адрресс используя медленную операцию умножения l=y*Bitmap.width +x.


 
Fostr   (2005-09-24 22:45) [2]

С английским у меня проблем нет, спасибо. Хелпом пользоваться умею, но любому иногда что-то бывает непонятным. В любом случае спасибо за разъянения.


 
MBo ©   (2005-09-25 07:26) [3]

В Статьи загляни


 
Fenik ©   (2005-09-25 10:56) [4]

http://delphibase.spb.ru/?action=viewfunc&topic=mediaimg&id=10300
http://www.delphimaster.ru/articles/pixels/index.html


 
GrayFace ©   (2005-09-25 19:52) [5]

PAVIA ©   (24.09.05 22:37) [1]
ScanLine выигрывает за счет, того что каждый раз не нужно преводить координаты x,y в линейный адрресс используя медленную операцию умножения l=y*Bitmap.width +x.

Вовсе нет. Как я помню, работа с пикселями в 100 раз медленнее, чем работа со Scanline"ом.


 
Sapersky   (2005-09-26 11:33) [6]

Из-за того, что при обращении к свойству Pixels вызываются Get/Set функции и ещё куча внутри них. Из-за преобразования цвета в к 24-битному формату, если на самом деле другой.
В FastLib ( http://prdownloads.sourceforge.net/skinner/FastLib.zip?download ) Pixels реализован как двумерный массив-указатель, для каждого формата отдельно, например, для 24 бит:

 TFColor = packed record
   b,g,r: Byte;
 end;

 TLine24   = array[Word]of TFColor;  PLine24   =^TLine24;
 TPixels24 = array[Word]of PLine24;  PPixels24 =^TPixels24;

 Pixels24:   PPixels24; // typed scanlines - Pixels24[y,x]: TFColor

И довольно шустро работает. Хотя Scanlines всё-таки быстрее.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.045 c
2-1126092416
Максим
2005-09-07 15:26
2005.10.16
Помогите


14-1127718048
Vudu
2005-09-26 11:00
2005.10.16
Почему забегают часы?


2-1127322319
logan
2005-09-21 21:05
2005.10.16
Открытие файла...


5-1102862014
Hyboid
2004-12-12 17:33
2005.10.16
Кнопка в Edit


14-1127468953
Игорь Шевченко
2005-09-23 13:49
2005.10.16
Мы на горе всем буржуям мировой пожар раздуем...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский