Форум: "Основная";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизКак БЫСТРО проверить, чист ли Canvas? Найти похожие ветки
← →
oleg_SYS (2003-06-28 21:46) [0]У меня такая проблема: мне нужно проверить большое число BitMap`ов, среди которых может оказаться простое одноцветное избражение. Я сделал неплохой цикл, который проверяет изображение попиксельно. Причём, цикл остановится на том моменте, когда заметит "посторонний" пиксел.
for b:=1 to bm.height do
begin
for a:=1 to bm.Width do
begin
if bm.Canvas.Pixels[0,0]<>bm.Canvas.Pixels[a-1,b-1]
then begin d:=True; Exit; end;
end;
end;
Т.е., если d=False, то изображение однотонное.
Но это медленный способ. Никто не знает что-то побыстрее? (кроме assembler`а :)
Спасибо...
← →
Fenik (2003-06-28 22:00) [1]Вот побыстрее.
Если возвращает True, то рисунок одноцветный.
function OneColorOnBitmap(Bitmap: TBitmap): Boolean;
type
TRGB = record
B, G, R: Byte;
end;
pRGB = ^TRGB;
var x, y: Integer;
Dest: pRGB;
C: TRGB;
begin
Result := True;
C.R := Lo(Bitmap.Canvas.Pixels[0, 0]);
C.G := Lo(Bitmap.Canvas.Pixels[0, 0] shr 8);
C.B := Lo((Lo(Bitmap.Canvas.Pixels[0, 0]); shr 8) shr 8);
for y := 0 to Bitmap.Height - 1 do begin
Dest := Bitmap.ScanLine[y];
for x := 0 to Bitmap.Width - 1 do begin
with Dest^ do
if (B <> C.B) or (G <> C.G) or (R <> C.R) then begin
Result := False;
Break;
end;
Inc(Dest);
end;
end;
end;
← →
oleg_SYS (2003-06-28 22:15) [2]Спасибо! ScanLine работает намного быстрее. Может, существует ещё какой-то способ?
← →
Fenik (2003-06-28 22:19) [3]Читай здес:
http://www.delphimaster.ru/articles/pixels/index.html
← →
oleg_SYS (2003-06-28 23:01) [4]Fenik, у меня почему-то твоя функция не работает. Она всегда возвращает значение False :(
← →
Fenik (2003-06-29 00:24) [5]Вставь
Bitmap.PixelFormat := pf24Bit;
← →
oleg_SYS (2003-06-29 12:14) [6]Fenik, всё-равно не работает :(
← →
Fenik (2003-06-29 12:39) [7]Да, моя ошибка.
Вот. Исправь условие на это:
if (B <> C.B) and (G <> C.G) and (R <> C.R) then begin
Result := False;
Exit;
end;
← →
oleg_SYS (2003-06-30 17:27) [8]Fenik, теперь работает. Спасибо! Скорость меня устраивает :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c