-
Гружу картинку bmp в TImage, он большой 7000 пикселей,чб
procedure TForm1.Button11Click(Sender: TObject);
var
pixelz:byte;
x:dword;
begin
for x:=0 to 7400 do begin
pixelz:=Image1.Picture.Bitmap.Canvas.Pixels[x,0];
Image1.Canvas.Pixels[x,0]:=clRed;
end;
end; Хочу рисовать точку(пока полосу красную) где произошел визуальный скан строчки. Т.к на экран полностью картинка не влезла, то TImage1.Strech:=True; Цвет точки из битмапа, черчение тоже на визуально сжатом изображении, без изменения исходного изображения в памяти. Но что-то не работает, нет красной полосы!
-
Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE. Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.
-
Image1.Bitmap.Canvas.Pixels[x,0]:=clRed;
-
рисовать линию точками - самый тупой и медленный вариант что мог прийти в голову
-
> рисовать линию точками
это единственный вариант нарисовать линию. а вот каким образом вычислять точки и заполнять их - второй вопрос, и тут стоило бы уже поинтересоваться у автора зачем он линию одного цвета и без прозрачности рисует точками через getpixel()/setpixel()
-
> это единственный вариант нарисовать линию.
lineto не?
-
> robt (16.03.13 13:24) [5] > > > это единственный вариант нарисовать линию. > > lineto не?
А lineto разве не точками рисует? :)
-
просто он узко мыслит :) ну а мы, как обычно, широко буквоедствуем =)
-
> Kerk © (16.03.13 15:53) [6]
ну не через setpixel однозначно, а в любом случае более кошерным алгоритмом
-
> он большой 7000 пикселей,чб
> пока полосу красную
-
> Kerk © (16.03.13 15:53) [6]
> А lineto разве не точками рисует? :)
Не совсем. То, как рисует LineTo (это это ведь обертка над соответствующей функцией GDI) полностью зависит от устройства на который выводится линия. Это ведь может быть и векторный дисплей и метафайл, плоттер какой нибудь, да много чего еще. Т.е вполне себе возможен вариант, когда устройству достаточно сообщить начало и конец линии, а дальше оно уже само.
-
линию как тест пытался рисовать визуально считывание текущего цвета в пикселе, окраска в красный цвет, пауза, окраска пикселя в старый цвет переход к следующему пикселю.
Визуально бегущая красная точка по картинке, там где данные обрабатываются...
-
У тебя картинка ч/б. Один бит на пиксель. Поэтому ты не можешь нарисовать красную точку. Тебе надо перевести картинку в цветную к примеру 24 бита на пиксель. Image1.Picture.Bitmap.PixelFormat:=pf24bit;
-
> TImage1.Strech:=True;
Вот в этом ваша ошибка. Исходное изображение нужно грузить в память, а отображать в Image1 нужно другое изображение - интерполированное. И рисовать точки и линии нужно именно на уменьшенном, при этом запоминая положение нарисованного в большем изображении.
-
> Bitt (14.03.13 22:34)
Что за программа такая? Для чего это всё?
-
С помощью библиотек FastDIB или Graphics32, загружай в память оригинал, копируй, изменяй размер и потом вывод на TImage.Canvas. Canvas.Stretch вообще не трогай.
-
ага, собирался даже 2 изображения иметь для визуализации расчетов и собственно для расчетов в памяти. Просто в цветную перевести - большой расход памяти, в чб картинка 12-20мб весит... 2 изображения - банально большое уменьшать и переводить в цветное и скидывать в темп...
-
О-Сознание для выжигателя отображение прогресса, позже за счет визуального контроля хочу прикрутить пропуск холостых рядов и отрубания конца прохода. Сделал движок - долго ходит, реальное разрешение будет меньше, пока не валится в ошибку. Только красной точки нет, белый фон окрашивается в красный, кроме черного. VISUAL - Timage мелкий битмап цветной 24бит 400х213 для визуализации MAP - большой 7485х3986 чб. для инфы. код: procedure TForm1.Button11Click(Sender: TObject);
label start,enduro;
var
pixelz,w:byte;
x,y:dword;
differX,xd,temp,differY,yd:dword;
begin
y:=0;
differX:=MAP.Picture.Graphic.Width DIV 400; temp:=(MAP.Picture.Graphic.Height*400) DIV MAP.Picture.Graphic.Width; differY:=MAP.Picture.Graphic.Height DIV temp;
start:
for x:=0 to MAP.Picture.Graphic.Width do begin
pixelz:=MAP.Picture.Bitmap.Canvas.Pixels[x,y];
xd:=x DIV differX;
yd:=y DIV differY;
w:=VISUAL.Canvas.Pixels[xd,yd]; VISUAL.Canvas.Pixels[xd,yd]:=clRed;
Label2.Caption:='REAL:'+IntToStr(x)+'/'+IntToStr(y);
Label4.Caption:='VISUAL:'+IntToStr(xd)+'/'+IntToStr(yd);
VISUAL.Canvas.Pixels[xd,yd]:=w; end;
Inc(y);
application.ProcessMessages;
if Button14.tag=1 then goto enduro;
if MAP.Picture.Graphic.Height<y then goto enduro;
goto start;
enduro:
end;
|