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

Вниз

TImage рисование точки   Найти похожие ветки 

 
Bitt   (2013-03-14 22:34) [0]

Гружу картинку 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];
{if pixelz<>0 then} Image1.Canvas.Pixels[x,0]:=clRed;
                        end;
end;

Хочу рисовать точку(пока полосу красную) где произошел визуальный скан строчки. Т.к на экран полностью картинка не влезла, то TImage1.Strech:=True;
Цвет точки из битмапа, черчение тоже на визуально сжатом изображении, без изменения исходного изображения в памяти.
Но что-то не работает, нет красной полосы!


 
DimaBr ©   (2013-03-16 12:58) [1]

Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены.


 
Savek   (2013-03-16 13:10) [2]

Image1.Bitmap.Canvas.Pixels[x,0]:=clRed;


 
robt   (2013-03-16 13:20) [3]

рисовать линию точками - самый тупой и медленный вариант что мог прийти в голову


 
antonn ©   (2013-03-16 13:23) [4]


> рисовать линию точками

это единственный вариант нарисовать линию.
а вот каким образом вычислять точки и заполнять их - второй вопрос, и тут стоило бы уже поинтересоваться у автора зачем он линию одного цвета и без прозрачности рисует точками через getpixel()/setpixel()


 
robt   (2013-03-16 13:24) [5]


> это единственный вариант нарисовать линию.

lineto не?


 
Kerk ©   (2013-03-16 15:53) [6]


> robt   (16.03.13 13:24) [5]
>
> > это единственный вариант нарисовать линию.
>
> lineto не?

А lineto разве не точками рисует? :)


 
antonn ©   (2013-03-16 16:37) [7]

просто он узко мыслит :)
ну а мы, как обычно, широко буквоедствуем =)


 
robt   (2013-03-16 18:37) [8]


> Kerk ©   (16.03.13 15:53) [6]

ну не через setpixel однозначно, а в любом случае более кошерным алгоритмом


 
clickmaker ©   (2013-03-16 19:07) [9]

> он большой 7000 пикселей,чб


> пока полосу красную


 
DVM ©   (2013-03-16 20:12) [10]


> Kerk ©   (16.03.13 15:53) [6]


> А lineto разве не точками рисует? :)

Не совсем. То, как рисует LineTo (это это ведь обертка над соответствующей функцией GDI) полностью зависит от устройства на который выводится линия. Это ведь может быть и векторный дисплей и метафайл, плоттер какой нибудь, да много чего еще. Т.е вполне себе возможен вариант, когда устройству достаточно сообщить начало и конец линии, а дальше оно уже само.


 
Bitt   (2013-04-09 13:32) [11]

линию как тест пытался рисовать
визуально
считывание текущего цвета в пикселе,
окраска в красный цвет,
пауза,
окраска пикселя в старый цвет
переход к следующему пикселю.

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


 
Павиа   (2013-04-09 14:05) [12]

У тебя картинка ч/б. Один бит на пиксель. Поэтому ты не можешь нарисовать красную точку. Тебе надо перевести картинку в цветную к примеру 24 бита на пиксель.
Image1.Picture.Bitmap.PixelFormat:=pf24bit;


 
Pitt   (2013-04-09 14:08) [13]


> TImage1.Strech:=True;


Вот в этом ваша ошибка.
Исходное изображение нужно грузить в память, а отображать в Image1 нужно другое изображение - интерполированное.
И рисовать точки и линии нужно именно на уменьшенном, при этом запоминая положение нарисованного в большем изображении.


 
О-Сознание   (2013-04-09 17:52) [14]

> Bitt   (14.03.13 22:34)  

Что за программа такая?
Для чего это всё?


 
Baks   (2013-04-10 14:46) [15]

С помощью библиотек FastDIB или Graphics32, загружай в память оригинал, копируй, изменяй размер и потом вывод на TImage.Canvas. Canvas.Stretch вообще не трогай.


 
Bitt   (2013-04-13 21:02) [16]

ага,
собирался даже 2 изображения иметь для визуализации расчетов
и собственно для расчетов в памяти.
Просто в цветную перевести - большой расход памяти, в чб картинка 12-20мб весит...
2 изображения - банально большое уменьшать и переводить в цветное и скидывать в темп...


 
Bitt   (2013-04-14 21:38) [17]

О-Сознание
для выжигателя отображение прогресса, позже за счет визуального контроля хочу прикрутить пропуск холостых рядов и отрубания конца прохода.
Сделал движок - долго ходит, реальное разрешение будет меньше, пока не валится в ошибку.
Только красной точки нет, белый фон окрашивается в красный, кроме черного.
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; // resize const  {7400}=18
temp:=(MAP.Picture.Graphic.Height*400) DIV  MAP.Picture.Graphic.Width; // {3986}=213
differY:=MAP.Picture.Graphic.Height DIV temp;

//showmessage(intTOstr(differY));

start:
for x:=0  to MAP.Picture.Graphic.Width do begin
pixelz:=MAP.Picture.Bitmap.Canvas.Pixels[x,y];
{if pixelz<>0 then     fire on!!!}
xd:=x DIV differX;
yd:=y DIV differY;
w:=VISUAL.Canvas.Pixels[xd,yd]; // save color
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; // reverse color
                        end;
Inc(y);
application.ProcessMessages;
if Button14.tag=1 then goto enduro;{STOP KEY}
if MAP.Picture.Graphic.Height<y then goto enduro;
goto start;
enduro:
end;



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

Форум: "Прочее";
Текущий архив: 2013.09.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.015 c
10-1185369660
Magedon
2007-07-25 17:21
2013.09.22
Access и экспорт


11-1248204990
Ruzzz
2009-07-21 23:36
2013.09.22
Использование AppletTerminated, цель этой переменной?


2-1357371621
Handler
2013-01-05 11:40
2013.09.22
исключить дублирование в ComboBox ах


2-1357583131
Tim29
2013-01-07 22:25
2013.09.22
Работа с файлами


2-1357841185
Разведка
2013-01-10 22:06
2013.09.22
как определить контрол вызвавший popupmenu





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский