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

Вниз

Как выставить на поверхности Карты высот числовые зачения 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);
         //&#226; &#240;&#224;&#228;&#243;&#227;&#229; &#239;&#238;&#241;&#235;&#229; &#244;&#232;&#238;&#235;&#229;&#242;&#238;&#226;&#238;&#227;&#238; &#232;&#228;&#229;&#242; &#238;&#239;&#255;&#242;&#252; &#239;&#229;&#240;&#229;&#245;&#238;&#228; &#234; &#234;&#240;&#224;&#241;&#237;&#238;&#236;&#243;
         //&#229;&#241;&#235;&#232; &#229;&#227;&#238; &#237;&#224;&#228;&#238; &#243;&#247;&#232;&#242;&#251;&#226;&#224;&#242;&#252; &#240;&#224;&#241;&#241;&#234;&#238;&#236;&#236;&#229;&#237;&#242;&#232;&#240;&# 243;&#233;
        // 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;

       //&#239;&#238;&#241;&#247;&#232;&#242;&#224;&#229;&#236; &#234;&#238;&#235;&#232;&#247;&#229;&#241;&#242;&#226;&#238; &#225;&#224;&#233;&#242; &#237;&#224; &#239;&#232;&#234;&#241;&#229;&#235;&#252;
       if bmp.PixelFormat=pf32bit then BytesPerPixel:=4  //&#229;&#241;&#235;&#232; 32&#225;&#232;&#242;&#224;, &#242;&#238;4 &#225;&#224;&#233;&#242;&#224; &#237;&#224; &#239;&#232;&#234;&#241;&#229;&#235;&#252;
       else BytesPerPixel:=3; //&#239;&#240;&#229;&#228;&#239;&#238;&#235;&#238;&#230;&#232;&#236;, &#247;&#242;&#238; &#234;&#224;&#240;&#242;&#232;&#237;&#234;&#224; 24-&#225;&#232;&#242;&#237;&#224;&#255;, &#242;.&#229;. 3 &#225;&#224;&#233;&#242;&#224; &#237;&#224; &#239;&#232;&#234;&#241;&#229;&#235;&#252;
              //&#241; &#228;&#240;&#243;&#227;&#232;&#236;&#232; &#244;&#238;&#240;&#236;&#224;&#242;&#224;&#236;&#232; (8&#225;&#232;&#242;, 16 &#225;&#232;&#242;) &#240;&#224;&#225;&#238;&#242;&#224;&#242;&#252; &#237;&#229; &#225;&#243;&#228;&#229;&#242;

       for j:=0 to h-1 do
         for i:=0 to w-1 do
       // &#194;&#251;&#228;&#229;&#235;&#255;&#229;&#242; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#232;&#237;&#242;&#229;&#237;&#241;&#232;&#226;&#237;&#238;&#241;&#242;&#232; &#232;&#231; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#255; &#246;&#226;&#229;&#242;&#224; RGB
       // &#227;&#228;&#229; R - &#202;&#240;&#224;&#241;&#237;&#251;&#233;, G - &#199;&#229;&#235;&#229;&#237;&#251;&#233;, B - &#209;&#232;&#237;&#232;&#233;
         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^); //&#226;&#238;&#242; &#231;&#228;&#229;&#241;&#252; &#243;&#241;&#242;&#224;&#237;&#224;&#226;&#235;&#232;&#226;&#224;&#229;&#242;&# 241;&#255; &#226;&#251;&#241;&#238;&#242;&#224; &#226;&#229;&#240;&#248;&#232;&#237; &#226; &#228;&#232;&#224;&#239;&#224;&#231;&#238;&#237;&#229; &#238;&#242; 0 &#228;&#238; 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("&#212;&#224;&#233;&#235; "+OpenPictureDialog1.FileName+" &#237;&#229; &#237;&#224;&#233;&#228;&#229;&#237;"),
                  "&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK or MB_ICONERROR);
 except
   MessageBox(Handle,
              PAnsiChar("&#206;&#248;&#232;&#225;&#234;&#224; &#226;&#238; &#226;&#240;&#229;&#236;&#255; &#231;&#224;&#227;&#240;&#243;&#231;&#234;&#232; &#244;&#224;&#233;&#235;&#224; "+
                OpenPictureDialog1.FileName),
              "&#206;&#248;&#232;&#225;&#234;&#224;",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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.041 c
15-1165499290
XProger
2006-12-07 16:48
2006.12.31
Opera Mini


2-1166116460
serko
2006-12-14 20:14
2006.12.31
В определенное время...


2-1166052594
HF-Trade
2006-12-14 02:29
2006.12.31
Отцентровать изображения в TImage


15-1165427759
Гоблин
2006-12-06 20:55
2006.12.31
Flash


4-1156283062
Андрей555
2006-08-23 01:44
2006.12.31
КАК определеить на сколько переместилась мышка?





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