Форум: "Основная";
Текущий архив: 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.037 c