Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
ВнизCanvas.Pixels быстрее? Найти похожие ветки
← →
debuger © (2004-09-30 20:43) [0]Доброго всем всего.
Я явно чего-то недопонимаю, потому хочу услышать ваше мнение.for i := 0 to 100 do
for j := 0 to 100 do
bArray[ i, j ] := vBitMap.vCanvas.Pixels[ i, j ] xor $0000FF;
скорость (разница GetTickTime) = 50 мс.for j := 0 to 100 do
begin
ptr := vBitMap.ScanLine[ j ];
for i := 0 to 100 do
bArray[ i, j ] := p[ i shl 2 ];
end;
скорость (разница GetTickTime) = 350 мс. !!!
← →
debuger © (2004-09-30 20:46) [1]Вопрос к тому, что вроде как через сканлайн должно быть быстрее.
← →
debuger © (2004-09-30 21:45) [2]Кто-то мне сказал, что
shl
слишком трудоемко.
Заменил ее на* 4
, результаты те же!
Кто говорил, что ScanLine быстрее?
← →
GuAV © (2004-09-30 22:05) [3]поменяй местами в bArray i и j после чего используй move.
тога scanline быстрее
← →
debuger © (2004-09-30 22:11) [4]Как move? когда мне нужно каждый четвертый байт из того, что возвращает ScanLine.
Тут шутка в том, что в битмапе грэйскейл изображение, и мне нужно только одну составляющую RGB. Вообще-то задача в том чтобы из битмапа получить двумерный массив байт (елемент массива - значение интенсивности на битмапе), и даже 50 мс для меня очень много! Хотя бы 10-20.
И все-таки на счет мува поподробней...
← →
Рыба © (2004-09-30 22:11) [5]>for j := 0 to 100 do
> begin
> ptr := vBitMap.ScanLine[ j ];
> for i := 0 to 100 do
> bArray[ i, j ] := p[ i shl 2 ];
> end;
Мдя :))
← →
DiamondShark © (2004-09-30 22:13) [6]Никто не говорил, что ScanLine быстрее.
← →
Рыба © (2004-09-30 22:14) [7]>DiamondShark © (30.09.04 22:13) [6]
>Никто не говорил, что ScanLine быстрее.
Плюнь в лицо этому никто!! ;-))
← →
DiamondShark © (2004-09-30 22:15) [8]Работай с битмапами напрямую через API. Компоненты для этого слишком тяжёлые.
← →
debuger © (2004-09-30 22:16) [9]2 Рыба.
Кроме этой опечатки, ты еще не нашел vBitMap.vCanvas.
PS: Если любишь указывать всем на их опечатки, то указывай сразу на все, каждую отдельным постом плохо читается...
2 DiamindShark. Говорили, на этом же сайте...
← →
DiamondShark © (2004-09-30 22:17) [10]
> Рыба © (30.09.04 22:14) [7]
Ты с битмапами работал, или это твоя святая вера?
А код смотрел?
← →
DiamondShark © (2004-09-30 22:18) [11]
> debuger © (30.09.04 22:16) [9]
У тебя всегда есть выбор: верить тому, что говорят, или верить своим глазам.
← →
Рыба © (2004-09-30 22:23) [12]Я с битмапом работал и точно знаю, что ScanLine в десятки раз быстрее Canvas.Pixels.
← →
Рыба © (2004-09-30 22:31) [13]Попробуй сравнить скорость попиксельной заливки.
procedure FillBmpWithPixels(Bmp: TBitmap; R, G, B: Byte);
var x, y: Integer;
Color: TColor;
begin
Color := RGB(R, G, B);
for x := 0 to Bmp.Width - 1 do
for y := 0 to Bmp.Height - 1 do
Bmp.Canvas.Pixels[x, y] := Color;
end;
procedure FillBmpWithScanLine(Bmp: TBitmap; R, G, B: Byte);
var x, y: Integer;
p: pByteArray;
begin
Bmp.PixelFormat := pf24Bit;
for y := 0 to Bmp.Height - 1 do
begin
p := Bmp.ScanLine[y];
for x := 0 to Bmp.Width - 1 do
begin
p[x*3] := B;
p[x*3+1] := G;
p[x*3+2] := R;
end;
end;
end;
← →
Mihey_temporary © (2004-09-30 22:41) [14]Поддерживаю Рыбу. Протестировал код debuger © (30.09.04 20:43) у себя - при тех же числах (сканится 100х100) использование Canvas.Pixels даёт 30 мс, а Scanline - 1 мс. При этом не совсем понял, как p[ i shl 2 ] работает (т.к. Delphi матюгался), поэтому использовал что-то вроде этого:
type PByteArray = ^TByteArray;
TByteArray = array [0..500] of TRGBTriple;
var i, j: Integer;
p: PByteArray;
begin
for j := 0 to 100 do
begin
p := vBitMap.ScanLine[ j ];
for i := 0 to 100 do
bArray[ i, j ] := p[i].rgbtBlue;
end;
← →
Рыба © (2004-09-30 22:42) [15]>debuger © (30.09.04 21:45) [2]
>Кто-то мне сказал, что shl слишком трудоемко.
Плюнь ему в глаз!! :о)))
← →
DiamondShark © (2004-09-30 22:50) [16]Да, это я нагнал, извиняюсь :(
← →
DiamondShark © (2004-09-30 22:53) [17]Вариант со сканлайн дал измеримый результат лишь для размеров выше 1024х1024.
Что-то там не то намеряли...
← →
Рыба © (2004-09-30 22:59) [18]>debuger ©
Почитай
http://www.delphimaster.ru/articles/pixels/index.html
Может пригодится ;)
← →
debuger © (2004-10-03 16:51) [19]Думаю плевать ни в кого особо не нужно.
Весь прикол был BitMap.HandleType = bmDDB, когда он bmDIB сканлайн нереально решает, где-то около 5 мс.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c