Сейчас на форуме: asfa (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Файлы *.rgn, создать\открыть
Посл.ответ Сообщение

Ранг: 13.8 (новичок), 1thx
Активность: 0.010
Статус: Участник

Создано: 23 марта 2010 20:52
· Личное сообщение · #1

Привет всем.
Нашёл у себя такой файлик cws.rgn
Находится он по адресу \masm32\examples\exampl06\mob\cws
Там же лежит exe, который вместо стандартного окна "заряжает" свой рисунок



Вот собственно вопрос, как и чем "слепить" себе такой же *.rgn
Подскажите, если есть время.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 23 марта 2010 20:59
· Личное сообщение · #2

А исходник открыть не судьба?
там же всё написано

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 23 марта 2010 23:18 · Поправил: Coderess
· Личное сообщение · #3

В файле рессурсов посмотри

Code:
  1. RANGE RGN "cws.rgn"
  2. 1000 BITMAP "cws.bmp"


Из коментария понятно

the region-data for the
; bmp is made by 'RGN Generator v1.01'



Прога с Codeproject
a843_23.03.2010_CRACKLAB.rU.tgz - RGNCreator_demo.zip

Также здесь посмотри
http://www.exelab.ru/f/action=vthread&forum=7&topic=8485&p age=0

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 марта 2010 01:16
· Личное сообщение · #4

cosinus
Интересный вопрос, также когдато думал над этим. Есть алгоритм, который позволяет описать фигуру по пикселям, тоесть её образ отделить от изображения www.wasm.ru/forum/viewtopic.php?pid=277609#p277609

Code:
  1. VECTOR_UP                 equ 0
  2. VECTOR_RIGHT      equ 1
  3. VECTOR_DOWN       equ 2
  4. VECTOR_LEFT       equ 3
  5.  
  6. IMAGE_BORDERS struct
  7. ImageWidth        ULONG ?
  8. ImageHeight       ULONG ?
  9. IMAGE_BORDERS ends
  10. PIMAGE_BORDERS  typedef ptr IMAGE_BORDERS
  11.  
  12. SLICING_DATA struct
  13. ContextHandle     HANDLE ?
  14. Borders   IMAGE_BORDERS <>
  15. PointCallback     PVOID ?
  16. Vector     ULONG ?
  17. PointX     ULONG ?
  18. PointY     ULONG ?
  19. SLICING_DATA ends
  20. PSLICING_DATA typedef ptr SLICING_DATA
  21.  
  22. Point proc C
  23. ;Ebx = SLICING
  24. ;Esi = X
  25. ;Edi = Y
  26.          assume ebx:PSLICING_DATA
  27.          test esi,esi
  28.          js carry_               ;X < 0
  29.          test edi,edi
  30.          js carry_               ;Y < 0
  31.          cmp [ebx].Borders.ImageWidth,esi
  32.          jbe carry_
  33.          cmp [ebx].Borders.ImageHeight,edi
  34.          jbe carry_
  35.          Call [ebx].PointCallback
  36.          test eax,eax
  37.          ret
  38. carry_:
  39.          test ebx,ebx     ;Reset fz
  40.          ret
  41. Point endp
  42.  
  43. Slicing proc uses esi edi ebx SlicingData:PSLICING_DATA
  44. ;Вычисляет координаты следующей точки контура и вектор в ней для оси OY направленной вверх.
  45.          mov ebx,SlicingData
  46.          assume ebx:PSLICING_DATA
  47.          mov esi,[ebx].PointX
  48.          mov edi,[ebx].PointY
  49.          mov eax,[ebx].Vector
  50.          add esi,dword ptr [FirstTable + eax*8]           ;X1
  51.          add edi,dword ptr [FirstTable + eax*8 + 4]  ;Y1
  52.          Call Point
  53.          jnz First_Point_
  54.          mov eax,[ebx].Vector
  55.          add esi,dword ptr [NextTable + eax*8]             ;X2
  56.          add edi,dword ptr [NextTable + eax*8 + 4]   ;Y2
  57.          Call Point
  58.          jnz Return_
  59.          dec [ebx].Vector
  60.          jmp Correct_Vector_
  61. First_Point_:
  62.          inc [ebx].Vector
  63. Return_:
  64.          mov [ebx].PointX,esi
  65.          mov [ebx].PointY,edi
  66. Correct_Vector_:
  67.          and [ebx].Vector,11b
  68.          ret
  69. ; dX dY
  70. FirstTable:
  71.                         DD +1, +1
  72.                         DD +1, -1
  73.                         DD -1, -1
  74.                         DD -1, +1
  75.                         
  76. NextTable:
  77.                         DD -1,  0
  78.                         DD  0, +1
  79.                         DD +1,  0
  80.                         DD  0, -1
  81. Slicing endp
  82.  
  83. SlicingOverwind proc uses esi edi ebx SlicingData:PSLICING_DATA
  84. ;Вычисляет координаты следующей точки контура и вектор в ней для оси OY направленной вниз.
  85.          mov ebx,SlicingData
  86.          assume ebx:PSLICING_DATA
  87.          mov esi,[ebx].PointX
  88.          mov edi,[ebx].PointY
  89.          mov eax,[ebx].Vector
  90.          add esi,dword ptr [FirstTable + eax*8]           ;X1
  91.          add edi,dword ptr [FirstTable + eax*8 + 4]  ;Y1
  92.          Call Point
  93.          jnz First_Point_
  94.          mov eax,[ebx].Vector
  95.          add esi,dword ptr [NextTable + eax*8]             ;X2
  96.          add edi,dword ptr [NextTable + eax*8 + 4]   ;Y2
  97.          Call Point
  98.          jnz Return_
  99.          dec [ebx].Vector
  100.          jmp Correct_Vector_
  101. First_Point_:
  102.          inc [ebx].Vector
  103. Return_:
  104.          mov [ebx].PointX,esi
  105.          mov [ebx].PointY,edi
  106. Correct_Vector_:
  107.          and [ebx].Vector,11b
  108.          ret
  109. ; dX dY
  110. FirstTable:
  111.                         DD +1, -1
  112.                         DD +1, +1
  113.                         DD -1, +1
  114.                         DD -1, -1
  115.                         
  116. NextTable:
  117.                         DD -1,  0
  118.                         DD  0, -1
  119.                         DD +1,  0
  120.                         DD  0, +1
  121. SlicingOverwind endp
  122.  
  123. Describe proc uses esi edi ebx SlicingData:PSLICING_DATA
  124. ;Описывает контур. Исходный вектор равен нулю(Up), фон слева, иначе войдёт в бесконечный цикл!
  125.          mov ebx,SlicingData
  126.          assume ebx:PSLICING_DATA
  127.          mov esi,[ebx].PointX
  128.          mov edi,[ebx].PointY
  129.          invoke Slicing, SlicingData
  130. loop_:
  131.          invoke Slicing, SlicingData
  132.          cmp [ebx].Vector,VECTOR_UP
  133.          jne loop_
  134.          cmp [ebx].PointX,esi
  135.          jne loop_
  136.          cmp [ebx].PointY,edi
  137.          jne loop_
  138.          xor eax,eax
  139. return_:
  140.          ret
  141. Describe endp
  142.  
  143. DescribeOverwind proc uses esi edi ebx SlicingData:PSLICING_DATA
  144. ;Описывает контур. Исходный вектор равен нулю(Down), фон слева, иначе войдёт в бесконечный цикл!
  145.          mov ebx,SlicingData
  146.          assume ebx:PSLICING_DATA
  147.          mov esi,[ebx].PointX
  148.          mov edi,[ebx].PointY
  149.          invoke SlicingOverwind, SlicingData
  150. loop_:
  151.          invoke SlicingOverwind, SlicingData
  152.          cmp [ebx].Vector,VECTOR_DOWN
  153.          jne loop_
  154.          cmp [ebx].PointX,esi
  155.          jne loop_
  156.          cmp [ebx].PointY,edi
  157.          jne loop_
  158.          xor eax,eax
  159. return_:
  160.          ret
  161. DescribeOverwind endp

Это позволяет:
o Быстро заливать фигуры.
o Динамически создавать регионы.
o Быстро определять принадлежность точки фигуре.
Для создания региона нужно разместить затравку слева от контура, найти его далее справа и описать. Для соеденения нескольких регионов или вырезания одного из другого замкнутый контур разбивается/соеденяются горизонтальными линиями.




Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 24 марта 2010 01:56
· Личное сообщение · #5

Clerk Круто как всегда,нет ли примера использования?

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 марта 2010 08:18
· Личное сообщение · #6

Coderess
Нет примера, давно уже обычные приложения не компилил. Позже мб посмотрю, нужно вспомнить алго заливки фигуры для начала


 eXeL@B —› Вопросы новичков —› Файлы *.rgn, создать\открыть
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати