|
|
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Спасибо большое всем кто помог. Она ещё не дописанна малость. Но, думаю, программистам показать можно:) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 01:56 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Тебе все несуразности говорить или только некоторые? :) Ну замени хотя бы вот этот странный кусок Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 02:04 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Результаты выполнение всех fopen, fread, fwrite нужно проверять и предупреждать, что "ну, не смогла я..." scanf("%s", &buf); в readBmpHeader лучше заменить на getchar(); fread-оф многовато. Для такой небольшой программы это не скажется, но если нужно будет читать большее число раз, то будет солидная потеря производительности. Лучше один раз прочитать все в память, а потом копировать из нее куски в элементы структы с помощью memcpy. Понятно, что сразу читать в структуру нельзя, тк могут быть проблемы с выравниванием элементов в памяти. И вообще ночью спать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 02:09 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
2 White Owl Эта фишка не проходит. Я уже пробовал. Вот что при выполнении получается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. А должно быть: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 08:47 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Sarin2 White Owl Эта фишка не проходит. Я уже пробовал. Вот что при выполнении получается: Код: plaintext 1. Странно, должно быть усе нормально же ... хмм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 10:17 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
JibSkeartСтранно, должно быть усе нормально же ... хмм Не будет, если нет выравнивания элементов структуры на границу байта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 10:28 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Землекоп JibSkeartСтранно, должно быть усе нормально же ... хмм Не будет, если нет выравнивания элементов структуры на границу байта. А я об этом даже как то и не подумал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 10:41 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 1) Поймать деление на ноль не боишься ? 2) rgbdiv - что это за странный параметр ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 14:07 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Sarin typedef struct RGBQuad{ unsigned char Blue; unsigned char Green; unsigned char Red; unsigned char Reserved; } RGBQuad; RGBQuad BlackPixel = {1, 1, 255, 1}; RGBQuad WhitePixel = {255, 255, 255, 255}; Почему черный?? исходя из описания типа вроде как красный и наверна {0, 0, 0, 255}; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 14:56 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Спасибо за внимание. Отвечу всем по порядку. Землекоп Проверку значений open, fread, fwrite обязательно добавлю. Я об этом сразу задумался. Руки не дошли ещё. //Не будет, если нет выравнивания элементов структуры на границу байта. Можно поподробней? Заманчивая мысль убрать столько лишних строк. И на будущее тож важно. А то ведь форматы есть у которых заголовок не 54 байта:) Tracer Деление на ноль уже словил. Ошибку исправил. rgbdiv - фишка интересная. Поскольку график, построенный самописцем, должен быть серый (чёрный в идеале) то я сразу отсекаю "цветные" пиксели. Соотношение r/g/b в сером пикселе должно быть в идеале еденица. Но практике близко к еденице. mrDOS Чёрный на самом деле. Просто меня заколебало смотреть на чёрные графики и я решил "разукрасить" отладку:) {0, 0, 0, 255} уделю особое внимание. В дескрипшене на БМП написанно что канал имеет значение от 1 до 255. Сам удивился. Ведь чёрный - это отсутствие цвета. А четвёртый байт оказался не нужен. Опять таки в дескрипшене я вычитал что четвёртый байт - баласт для оптимизации работы с процом. Однако применив познания в арифметике я понял, что что-то не так. Размер файла не сходится. Потом я напоролся на ошибку в проге (в процессе выполнения). Решил не читать баластный байт. Всё заработало, как и должно было. Отсюда вывод: в БМП, рождённом в шопе байт сей отсутствует. Поскольку шоп стандарту соответствует следует вывод, что байт сей исключён из формата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2005, 23:38 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Sarin//Не будет, если нет выравнивания элементов структуры на границу байта. Можно поподробней? Заманчивая мысль убрать столько лишних строк. И на будущее тож важно. А то ведь форматы есть у которых заголовок не 54 байта:) Когда объявляешь структуру, компилятор может "оптимизировать" ее - добить слишком короткие элементы структуры до двух/четырех/восьми/шестнадцати байт. По идее это может поднять скорость обращений к памяти. Управляется ключами компилятору или специальными командами препроцессора. По умолчанию обычно выравнивание равно единице или четырем (зависит от компилятора). Для gcc это команда компилятора -fpack-struct[=<n>] , или прямо в коде перед объявлением структуры пишешь #pragma pack(n) Sarin{0, 0, 0, 255} уделю особое внимание. В дескрипшене на БМП написанно что канал имеет значение от 1 до 255. Сам удивился. Ведь чёрный - это отсутствие цвета. А четвёртый байт оказался не нужен. Опять таки в дескрипшене я вычитал что четвёртый байт - баласт для оптимизации работы с процом. Однако применив познания в арифметике я понял, что что-то не так. Размер файла не сходится. Потом я напоролся на ошибку в проге (в процессе выполнения). Решил не читать баластный байт. Всё заработало, как и должно было. Отсюда вывод: в БМП, рождённом в шопе байт сей отсутствует. Поскольку шоп стандарту соответствует следует вывод, что байт сей исключён из формата. Тебе не кажется, что ты читал кривое описание формата? BMP бывают разных типов. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 00:47 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
White OwlКогда объявляешь структуру, компилятор может "оптимизировать" ее - добить слишком короткие элементы структуры до двух/четырех/восьми/шестнадцати байт. По идее это может поднять скорость обращений к памяти. Управляется ключами компилятору или специальными командами препроцессора. По умолчанию обычно выравнивание равно единице или четырем (зависит от компилятора). Для gcc это команда компилятора -fpack-struct[=<n>] , или прямо в коде перед объявлением структуры пишешь #pragma pack(n) Sarin{0, 0, 0, 255} уделю особое внимание. В дескрипшене на БМП написанно что канал имеет значение от 1 до 255. Сам удивился. Ведь чёрный - это отсутствие цвета. А четвёртый байт оказался не нужен. Опять таки в дескрипшене я вычитал что четвёртый байт - баласт для оптимизации работы с процом. Однако применив познания в арифметике я понял, что что-то не так. Размер файла не сходится. Потом я напоролся на ошибку в проге (в процессе выполнения). Решил не читать баластный байт. Всё заработало, как и должно было. Отсюда вывод: в БМП, рождённом в шопе байт сей отсутствует. Поскольку шоп стандарту соответствует следует вывод, что байт сей исключён из формата. Тебе не кажется, что ты читал кривое описание формата? BMP бывают разных типов. :) Если я что-то в чём-то понимаю, то int - это 4 байта, а short int 2. Соответственно структура, содержащая два поля типа вот: Код: plaintext 1. 2. должна быть длинной 6 байтов. Что будет если её выравнять? #pragma pack(n) Буква n что значит? Насчёт кривого описания - оч может быть. А бмп у меня 24ёх битный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 01:00 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Sarin Буква n что значит? Извини. Читал не внимательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 01:04 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 01:19 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
SarinЕсли я что-то в чём-то понимаю, то int - это 4 байта, а short int 2. Нет! :) Это зависит от того какой размер слова задан компилятору. Это может быть и 4/2, и 2/2, и 8/4, и 8/2. Единственное что можно сказать с уверенностью - short int не больше чем int, а int не больше чем long. Сколько байт они будут занимать в действительности зависит от того какой размер слова у целевого процессора с точки зрения компилятора. Хм... хорошо сказал... главное что верно :) Большинство современных компиляторов имеют типы данных int8, int16 и так далее. Вот у них размер в битах будет точным вне зависимости от платформы. А простой int - может быть каким угодно. Sarin Соответственно структура, содержащая два поля типа вот: Код: plaintext 1. 2. должна быть длинной 6 байтов. Что будет если её выравнять? А ты попробуй :) Вот возьми и запусти такую программку: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. SarinНасчёт кривого описания - оч может быть. А бмп у меня 24ёх битный. Ну а как ты думаешь, почему он называется 24-х битным? Откуда взялась эта цифра в названии? А? Одна точка описывается тремя восьмибитными байтами, один байт доля красного, один байт доля зеленого и один для доли синего цвета. 3*8 = получили 24. Просто и легко. Откуда в 24-х битном BMP возьмется четвертый байт? Нафига он там нужен? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 01:23 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Взял я это из дескрипшена. Там написанно было, что хоть байт этот и не используется никак! он введён для оптимизации работы с процессором. Так как x86 процы "фирмы Intel" быстрее делают выборку по чётным байтам. Логики, правда, не уследил. Где у них байтов чётных больше станет? ЗЫ: спасибо большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 08:42 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
SarinВзял я это из дескрипшена. Там написанно было, что хоть байт этот и не используется никак! он введён для оптимизации работы с процессором. Так как x86 процы "фирмы Intel" быстрее делают выборку по чётным байтам. Логики, правда, не уследил. Где у них байтов чётных больше станет? ИМХО для структуры RGBQuad при работе в палитровых режимах, преобразование палитра+растр -> контекст выполняется несколько быстрее, когда элементы палитры выровняны на границу слова, двойного слова или учетверенного слова. Так проще делать выборку по индексу (логическими операциями заместо По поводу выравнивания строки на границу кратную 2 (или 4). ИМХО та-же история. Проще делать сериализацию и парсинг. хотя непонятно, зачем Microsoft закладывал такие зависимости от аппаратуры. Наверное так проще было для не сильно быстрых машин под Windows 3.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 10:40 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
авторrgbdiv - фишка интересная. Поскольку график, построенный самописцем, должен быть серый (чёрный в идеале) то я сразу отсекаю "цветные" пиксели. Соотношение r/g/b в сером пикселе должно быть в идеале еденица. Но практике близко к еденице. В коде я вижу r/b/g/b - это специальное усиления blue ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 12:11 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
самописец походу синими чернилами пишет наверна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 13:37 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
SarinВзял я это из дескрипшена. Там написанно было, что хоть байт этот и не используется никак! он введён для оптимизации работы с процессором. Так как x86 процы "фирмы Intel" быстрее делают выборку по чётным байтам. Логики, правда, не уследил. Где у них байтов чётных больше станет? А логика этого завязана на железо. От ОС здесь ничего не зависит. Если тебе нужно БЫСТРО обработать картинку, то имеет смысл выровнять описание каждого пикселя в своем собственном буфере. То есть полноцветные 24-х битовые пиксели надо записывать в 32-х битовые ячейки массива. У тебя будет потеря производительности на чтении файла в память и записи картинки обратно в файл, но будет выигрыш на внутренней обработке картинки. Кстати, при посылке картиники из такого буфера на экран - скорее всего тоже будет падение производительности. Тоже самое касается и палитровых картинок, но там имеет смысл выравнивать не только пиксели, но и палитры. Впрочем на палитровых картинках количество байт на пиксель обычно достаточно мало чтобы не заморачиватсья с выравниванием пикселей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 18:06 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
TracerВ коде я вижу r/b/g/b - это специальное усиления blue ? (r/b)/(g/b) Логика: r/b ~ 1 => r~b; g/b ~ 1 => g ~ b => g ~ b ~ r. ~ - это у меня приближённо такое. White Owl У меня трабл со скоростью чтения. Но это в отдельной ветке решу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 23:26 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
ЗЫ: ща ей файл гиговый скармливать буду:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2005, 23:28 |
|
||
|
Исходники моей проги. (Может кто какую незуразность заметит)
|
|||
|---|---|---|---|
|
#18+
Я обожаю Си!!! Я обожаю Линух!!! Малышь в 8 килобайт справился быстрее, чем монстр в 650. И монстр справлялся не всегда. На сильных компах только. А это творение!!! Я знал что её любой файл по плечу. Но что она обработает его в 6 раз быстрее!!! Вот чем бы только открыть теперь полученную картинку:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2005, 00:07 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33144040&tid=2033080]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 440ms |

| 0 / 0 |
