Текущий архив: 2006.12.31;
Скачать: CL | DM;
ВнизКак выставить на поверхности Карты высот числовые зачения 0-255? Найти похожие ветки
← →
Vladimir1984 © (2006-12-13 02:24) [0]Как выставить на поверхности Карты высот числовые зачения 0-255?
← →
Джо © (2006-12-13 02:57) [1]Хм...
← →
Vladimir1984 © (2006-12-13 03:07) [2]Тоесть чтобы на каждом пикселе была цифровая надпись..
У меня карта высот по цветовой HSL(Красный<Желтый<Зеленый<Голубой<Синий<Магнетта) шкале...
← →
Джо © (2006-12-13 03:08) [3]Гм...
← →
Vladimir1984 © (2006-12-13 03:11) [4]Вот что то в таком духе...
http://slil.ru/23563496
← →
Rial © (2006-12-13 03:12) [5]Надпись на каждом пикселе... великолепно!
Я тоже недавно решал задачу, как в лаборатории, чтобы не украли,
к каждой молекуле изотопа U235 прикрепить микрожучок :)
В итоге прицепил каждую титановой цепью и больше не мучался.
← →
Vladimir1984 © (2006-12-13 03:13) [6]Ну ясаен красен что не на самом пикселе...у выше смотри картинку
← →
Джо © (2006-12-13 03:14) [7]Владимир, если Вас не затруднит... Какое у Вас профильное образование? В целях улучшения взаимопонимания интересуюсь.
← →
Vladimir1984 © (2006-12-13 03:15) [8]Инженер микроэлектроник, никогда не был программистом...не вольно занимаюсь этим =)
← →
Джо © (2006-12-13 03:18) [9]> [8] Vladimir1984 © (13.12.06 03:15)
> Инженер микроэлектроник, никогда не был программистом...не
> вольно занимаюсь этим =)
Так вот, Владимир, если Вас не затруднит, ответьте мне, пожалуйста, на вопрос по Вашей специальности (ответ на него мне очень важен). Вопрос такой: «какая маркировка на той микросхеме, что лежит у меня в заднем кармане брюк и как мне уменьшить сопротивление в резисторе XXX»?
← →
Rial © (2006-12-13 03:22) [10]Проблема то в чем заключается ?
1.Преобразовать значение цвета HSL в цифру.
2.Получить на картинке цвет пиксела.
3.Нарисовать на картинке текст, содержащий цифру.
4.Ваш вариант.
← →
Vladimir1984 © (2006-12-13 03:25) [11]Зачем так грубо? То что у меня проблема с объяснением для программиста...это из за неопытности...я не спорю...
Сейчас попробую поконкретнее объяснить...
← →
Vladimir1984 © (2006-12-13 03:26) [12]Вариант 3
← →
Джо © (2006-12-13 03:28) [13]> [11] Vladimir1984 © (13.12.06 03:25)
> Зачем так грубо? То что у меня проблема с объяснением для
> программиста...это из за неопытности...я не спорю...
Это не грубо. Это доступно объясняю, что мой вопрос для микроэлектронщика то же самое, что ваш вопрос для программиста. То есть, ответить на него невозможно принципиально.
← →
Джо © (2006-12-13 03:29) [14]> Сейчас попробую поконкретнее объяснить...
>
> [12] Vladimir1984 © (13.12.06 03:26)
> Вариант 3
Очень конкретно, ничего не скажешь. Это все равно, чтобы я на свой вопрос из [9] «уточнил», что микросхему левой рукой из кармана мне доставать сложно.
← →
Rial © (2006-12-13 03:29) [15]Грузим растр:
Var
Bmp:TBitmap;
...
Bmp.LoadFromFile(FileName);
Грузим JPEG картинку:
Var
J : tJPEGImage;
Bmp : TBitmap;
..
J.LoadFromFile(...);
Bmp.Assign(J);
Теперь рисуем на картинке
Bitmap.Canvas.Font.Color:=XXX;
Bitmap.Canvas.Font.Size :=XXX;
Bitmap.Canvas.TextOut(X, Y, Text);
Затем
Bmp.SaveToFile(...);
← →
Vladimir1984 © (2006-12-13 03:47) [16]Проблема:
Карта высот(heightmap) как я уже сказал по линейке HSL:procedure TfrmPulsar3D.bmp1Click(Sender: TObject);
function RGB2Hue(R, G, B: byte): real;
var
N, L: byte;
H: real;
begin
L:=max(R,G); L:=max(L,B);
N:=min(R,G); N:=min(N,B);
if (R=G)and(G=B)then
H:=0
else
begin
if (R>=G)and(G>=B)then H:=60*(G-N)/(L-N);
if (G>=R)and(R>=B)then H:=60+60*(L-R)/(L-N);
if (G>=B)and(B>=R)then H:=120+60*(B-N)/(L-N);
if (B>=G)and(G>=R)then H:=180+60*(L-G)/(L-N);
if (B>=R)and(R>=G)then H:=240+60*(R-N)/(L-N);
//â ðàäóãå ïîñëå ôèîëåòîâîãî èäåò îïÿòü ïåðåõîä ê êðàñíîìó
//åñëè åãî íàäî ó÷èòûâàòü ðàññêîììåíòèð&# 243;é
// if (R>=B)and(B>=G)then H:=300+60*(L-B)/(L-N)-1;
end;
result:=H;
end;
var
i,j,k:Integer;
r,g,b: ^BYTE;
BytesPerPixel: BYTE;
begin
try
if OpenPictureDialog1.Execute then
if FileExists(OpenPictureDialog1.FileName) then
begin
bmp.Width:=0;
bmp.Height:=0;
bmp.LoadFromFile(OpenPictureDialog1.FileName);
w:=bmp.Width;
h:=bmp.Height;
SetLength(vx,w);
SetLength(nx,w);
SetLength(cx,w);
for i:=0 to w-1 do
begin
SetLength(vx[i],h);
SetLength(nx[i],h);
SetLength(cx[i],h);
end;
//ïîñ÷èòàåì êîëè÷åñòâî áàéò íà ïèêñåëü
if bmp.PixelFormat=pf32bit then BytesPerPixel:=4 //åñëè 32áèòà, òî4 áàéòà íà ïèêñåëü
else BytesPerPixel:=3; //ïðåäïîëîæèì, ÷òî êàðòèíêà 24-áèòíàÿ, ò.å. 3 áàéòà íà ïèêñåëü
//ñ äðóãèìè ôîðìàòàìè (8áèò, 16 áèò) ðàáîòàòü íå áóäåò
for j:=0 to h-1 do
for i:=0 to w-1 do
// Âûäåëÿåò çíà÷åíèå èíòåíñèâíîñòè èç çíà÷åíèÿ öâåòà RGB
// ãäå R - Êðàñíûé, G - Çåëåíûé, B - Ñèíèé
begin
b:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+0);
g:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+1);
r:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+2);
vx[i,j]:=RGB2Hue(r^, g^, b^); //âîò çäåñü óñòàíàâëèâàåò&# 241;ÿ âûñîòà âåðøèí â äèàïàçîíå îò 0 äî 360
cx[i,j,1]:=r^/255;
cx[i,j,2]:=g^/255;
cx[i,j,3]:=b^/255;
end;
for i:=0 to w-1 do
for j:=0 to h-1 do
for k:=1 to 3 do
nx[i,j,k]:=1;
for i:=0 to w-2 do
for j:=0 to h-2 do
CalcNormals(i,vx[i,j],j,
i+1,vx[i+1,j],j,
i+1,vx[i+1,j+1],j+1,
nx[i,j,1],nx[i,j,2],nx[i,j,3]);
end else
MessageBox(Handle,
PAnsiChar("Ôàéë "+OpenPictureDialog1.FileName+" íå íàéäåí"),
"Îøèáêà",MB_OK or MB_ICONERROR);
except
MessageBox(Handle,
PAnsiChar("Îøèáêà âî âðåìÿ çàãðóçêè ôàéëà "+
OpenPictureDialog1.FileName),
"Îøèáêà",MB_OK or MB_ICONERROR);
end;
end;
Тут задаются координаты...begin
glBegin(GL_TRIANGLES);
for j:=2 to w-2 do
for k:=2 to h-2 do
begin
glColor3f(cx[j,k,1],cx[j,k,2],cx[j,k,3]);
glVertex3f(j-dw,vx[j,k]-dv,k-dh);
glColor3f(cx[j+1,k,1],cx[j+1,k,2],cx[j+1,k,3]);
glVertex3f(j-dw+1,vx[j+1,k]-dv,k-dh);
glColor3f(cx[j+1,k+1,1],cx[j+1,k+1,2],cx[j+1,k+1,3]);
glVertex3f(j-dw+1,vx[j+1,k+1]-dv,k-dh+1);
end;
← →
Джо © (2006-12-13 03:49) [17]У... Наконец, на 16-м посте вылезла «незначительная» подробность, что для визуализации используется OpenGL. То есть, маркировку микросхемы уже озвучили.
← →
Vladimir1984 © (2006-12-13 03:56) [18]Что мне еще надо озвучить?
← →
Rial © (2006-12-13 04:07) [19]Нифига не понял, что надо. Сдаюсь, помогите :)
А так, по кода глядя:
1. В подпроцедурке переменная H явно лишняя.
Почему бы не использовать везде Result.
2.А если L=N ?
3.^Byte=PByte;
4.Real - не самый лучший тип. Для быстродействия Single лучше.
5.
b:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+0);
g:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+1);
r:=Pointer(DWORD(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel+2);
заменить можно на
Type
TBGR = packed record
B, G , R : Byte;
end;
Var
Buf : ^TRGB;
Buf:=Pointer(Cardinal(bmp.ScanLine[bmp.Height-1-j])+i*BytesPerPixel);
Хотя правда все скорость напрочь убивается процедурой
преобразования цвета :(
6.
bmp.Height - кешировали же один раз уже, зачем опять метод вызывать ?
7.
for i:=0 to w-1 do
for j:=0 to h-1 do
for k:=1 to 3 do
nx[i,j,k]:=1;
Хм... я ошибаюсь... или куда направлены эти номали ?
8.
glColor3f(cx[j,k,1],cx[j,k,2],cx[j,k,3]);
а вот если сделать
Cx : Array... of GLSignle;
то можно будет написать так:
glColor3fv(@Cx[J, K]);
То же и glVertex3f касается.
← →
Vladimir1984 © (2006-12-13 04:13) [20]Программа откывает файл BMP, строит 3D поверхость по линейке HSL.
Задача: При клике на необходимый участок этой 3Д поверхности, появилась надпись с числовым значением соответсвующей высоте.
← →
Vladimir1984 © (2006-12-13 04:15) [21]полный исходник тут...
http://slil.ru/23563603
Страницы: 1 вся ветка
Текущий архив: 2006.12.31;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.044 c