|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77У меня где-то ошибка. Где понять не могу. Декодер (вьюер) заламывает некоторые строчки картинки. Подозреваю что проблема связана с неправильным выравниванием по границе байта. В CAPI документе сказано: CAPIMH coding is bit-oriented: the pixel bits are stored in the bits of code words, least significant first. No EOL code words or fill bits are included. If the data includes EOL code words, COMMON-ISDN-API ignores these. В другом документе сказано, что якобы нули надо добавлять перед EOL (000000000001) чтоб добить доцелых байтов, пробовал и до и после, есть ряд строк, которые получаются битые (почему не знаю), и вьюером не отображаются. Как правильно выровнять по границе байта? С этим я разобрался. После кода makeUp должен в обязательном порядке стоять код term, даже если 0. Кодер глючил на DoWhite(64), так как нулевой код терминации не дописывался. Выравнивание по границе байта скорее всего ни причем, EOL тоже можно думаю не ставить (если верить CAPI-цитате), а просто добить строку нулями кратно 8. Код: vbnet 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.
Узрел мелкую проблему: Один из немецких вьюеров ругается на мой файл. Пишет "Gleitkommadivision durch Null" (что-то насчет деления ну нуль) -файл сгенерированный через GS он отображает без ругани. Два остальных вьюера мой файл отображают. Немцам что-ли написать (te-systems.de, их вьюер ругается), может помогут ошибку найти в моем SFF? Ну и, нужна помощь по оптимизации кода на предмет быстродействия , код привел в предыдущем посте. Подозреваю, что проблема торможения в том 1) как я высчитываю биты 2) как я их потом через анализ String загоняю через mid в байты. Но у меня пока "чистых" идей как бороться с этими "типами данных" нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 15:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Узрел мелкую проблему: Один из немецких вьюеров ругается на мой файл. Пишет "Gleitkommadivision durch Null" (что-то насчет деления ну нуль) -файл сгенерированный через GS он отображает без ругани. Два остальных вьюера мой файл отображают. Немцам что-ли написать (te-systems.de, их вьюер ругается), может помогут ошибку найти в моем SFF? Нашел глюк: Код: vbnet 1. 2. 3.
Почему-то пишет в файл байт со значением "2", что не совместимо с понятиями чести того вьюера. А должно быть "1", странно... Сделал так (в человеко-читаемом виде): Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Глюк ушел, пишет 1. Непонятно еще, что с количеством '\0' в конце файла делать (соседний топик). Так что, с оптимизацией/быстродействием никто не поможет? Кажется это все что мне надо для полного счастия. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 16:53 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Оптимизации? Хотя бы так... Посмотрим на последний кусочек листинга writeLine() : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 22:05 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Спасибо что откликнулись. Ну скажем так, берем насыщенный файл 1 страница если GS, то время конвертации ~1сек (это с учетом промежуточного pdf-а) это я назвал "долгим". если мой исх. код, то 5-6 сек если чуть модифицировать (с вашей подсказкой, но по своему), то в 5 сек укладывается, ладно убедили Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Если делать с вашей библиотекой, то те же 5 сек, фактически никакого выигрыша, а тащить за собой эту dll или пытаться вникнуть в ее исходники, не уверен что надо, тем более по вашей ссылке исходников нет. P.S. У вас ошибка в строчке ниже (делите на 8), тем более итак уже выровняли кратно 8 строчкой выше Код: vbnet 1.
Когда я игрался с "добычей сырья", т.е. чтением битмап, тоже долго работало. Я думаю основные тормоза где-то при чтении битмапа, а не при распечатке коротких code_Line. Вот только где? Еще, я работаю со String, м.б. надо какой другой метод использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 01:54 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Обшибся я немного... Как обычно, чтобы реципиент подумал над алгоритмом... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 01:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Если делать с вашей библиотекой, то те же 5 сек, фактически никакого выигрыша, а тащить за собой эту dll или пытаться вникнуть в ее исходники, не уверен что надо, тем более по вашей ссылке исходников нетКак нет? А справа на странице ссылочка на ZIP? Да и просто распаковать экзешник - и получить библиотеку и пример использования в виде VB6-проекта? (в ссылке я просто ")" поставил впритык - а если скопировать ссылку руками? ) Там же (в библиотеке той), кстати, и асм'овская процедура получения бита из битмапа... попробуйте прикрутить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 02:04 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Там есть пример использования библиотеки и упомянутая dll, а не ее исходники. Для указанного вами места кода библиотека выигрыша не дает, разве попробовать бит вычислять и думать дальше что делать, если результат "ощутится". Но таскать ее за собой желания по любому нет. Проще Ghostscript таскать, тем более итак таскаю, ибо желания декодировать pdf-ы нет и не появится. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 02:18 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Ну, хорошо, если сделать только Код: vbnet 1. 2. 3.
вместо моего Код: vbnet 1. 2. 3.
то результат уложится в 3 сек (говорим об exe, в среде будет + 1-2сек) Если еще добавить ваш предыдущий ход, то будет попадать в 2-3 сек. 1) Как отыграть еще 2 секунды даб хотяб догнать GS ? (перегнать похоже не получится в силу сложности алгоритма) 2) Как не использовать вашу библиотеку? Счас вы скажете что она на C, использует битовые сдвиги и на VB так нельзя. Я б с удовольствием загнал все в C++ для осуществления следующей идеи: Димавысшим пилотажем было бы перекодирование TIFF в SFF на лету , т.е. без конвертации в физический SFF, а просто подменой заголовков в процессе передачи данных (ну и при приеме при записи в файл). С самим MH проблем конечно не возникнет. Но 1) У меня там нет замечательного класса CMultiFrameImage а рожать его по нулям я не осилю 2) Я не уверен, что вставлять GDI в код Opal есть хорошая идея (хотя мне его Linux-мультисистемность не нужна) 3) Рассчитывать что tiff будет в MH нельзя, поэтому переписывать заголовки суть идея бредовая, битмап действительно надо держать в памяти, а оттуда читать сканлинии. Посему проще делать так: (дублирующие SFF-ы заранее готовить не хочу) Я параллельно 1)Конвертирую TIFF->SFF (не жду!) и 2) Начинаю процесс набора номера и досылки этого SFF как факса (Но если его вдруг не окажется на момент начала отправки факса, то будет Ж!!!). По идее SFF начинает быть доступным для чтения (отправки fax data) еще не "дописавшись", так что чего бояться - факс все одно идет дольше, еще пока номер наберется, пока там факс ответит... 3) потом удаляю Ну естественно чем быстрее процедура конвертации и чем меньше грузит компьютер, тем лучше. А вдруг сразу будут начаты 20 процедур конвертации -> отправки... В GS мне честно говоря не нравится то, что при вызове из VB (хоть бы все и vbHide), начинает мелькать всякими песочными часиками (вирусы так себя часто ведут, неприятно это). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 03:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Неужели нет какой-нибудь родной API которая позволяет получить bit из байта? Хотя...большая часть изображения (незакодированного) -белый лист (или повторяется черное)... Стало быть GetBitX(255,a) и GetBitX(0,b) можно и не вычислять по 8 раз, результат и без вычислений ясен. Надо будет попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 04:27 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Хотя...большая часть изображения (незакодированного) -белый лист (или повторяется черное)... Стало быть GetBitX(255,a) и GetBitX(0,b) можно и не вычислять по 8 раз, результат и без вычислений ясенДа, действительно... Реальная факс-информация - это текст, так что "белых" полей-строк будет большинство, ну и можно их сразу скидывать по шаблону... Еще можно попробовать записывать результирующий файл не побайтно, а сразу блоками (например, построчно). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 10:09 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Если сделать так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
то оставляя мой код generateByte(the_byte) для упомянутого файла в 3 секунды я укладываюсь. Если взять 52 страницы справочника по AT-командам модема, то сконвертируется за 43 секунды. Вроде неплохо но: GS эти 52 страницы конвертит за 3 !!! секунды. >Еще можно попробовать записывать результирующий файл не побайтно, а сразу блоками (например, построчно). Чего-то не пойму как это делать. Так как ниже не получается ничего (код не работает): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И я сильно сомневаюсь что это ускорит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 11:54 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Впрочем, всё это - телодвижения Реально ускорить перекодирование можно только с помощью низкоуровневого "байт-интерпретатора". То есть либо C (без шарпов), либо ASM, либо Forth. На Форте, кстати, дело сводится только к перечислению 256 слов + ввод/вывод буфера. Но предлагать вам такое - это у меня рука не поднимается ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 12:04 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Короче, подведем итоги. По крайней мере с задачей справился. А уж где использовать GS, а где этот код позже буду смотреть. Если реально что-то можно улучшить (ускорить), я с удовольствием попробую. Код ниже это "текущая версия" с учетом всех плюсов/минусов. Ну и причесанная малость. Грубо, из любого TIFF 204x196 либо 204x98 шириной 1728 (а других не держим) я могу сделать SFF 203x196 либо 203x98 (в любой комбинации), ковертанув либо все страницы, либо последовательный блок страниц (от и до). Код: vbnet 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.
Код: vbnet 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. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725.
Код: vbnet 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.
Модератор: Дим, не забывай про спойлер ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 12:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Кстати, для Хаффмана... Можно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Выигрыш по скорости будет оптимальнее затрат на использоване памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 13:58 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTMМожно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Как это сделать? Не покажете на примере кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 15:27 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77AndreTMМожно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Как это сделать? Не покажете на примере кода?Ну, если будет время - покажу... Просто мне очень лень реализовывать такой массив на VB... поскольку надо будет весь твой код анализировать... хотя-я... можно будет попробовать заменить четыре функции... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 15:43 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, А чего там анализировать. Есть две ф-ции: DoWhite(runlen As Long) DoBlack(runlen As Long) Они используют 4 функции: termWhite(runlen As Long) termBlack(runlen As Long) makeUpWhite(makeup As Long) makeUpBlack(makeup As Long) Вы предлагаете эти 4 на что-то заменить (массивы, константы). Вот я и прошу показать как это сделать. Я же не прошу весь массив за меня ручками рисовать. Рисовать весь, согласен, рутинная работа. Я из libtiff все это копировал, а потом 2-3 часа сидел проставлял все эти case: и сверял тупо по трем документам (типа как р/счет на квитанции заполняете, считаете нули и ругаетесь), потому как в этих нулях и единицах запутаться на раз-два, там где стоит '? там в исходнике (упоминается в начале поста) были ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 16:06 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
А что показывать? Примерно так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 21:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Ну, я сделал как вы сказали, а именно: Код: vbnet 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.
ДимаЕсли взять 52 страницы справочника по AT-командам модема, то сконвертируется за 43 секунды. Вроде неплохо но: GS эти 52 страницы конвертит за 3 !!! секунды.AndreTMТо есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Выигрыш по скорости будет оптимальнее затрат на использоване памяти. Зря старался, получилось 46 секунд вместо 43. Память растранжирили, скорость наоборот чуть упала. Склоняюсь к исходному варианту. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Какой Variant , нах...? А не пробовали Array() As String ? Или еще проще - Dim termWhite() As String * 8 и так далее? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:24 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTMКакой Variant , нах...? А не пробовали Array() As String ? Или еще проще - Dim termWhite() As String * 8 и так далее? Пробовал. Только Array() предполагает Variant, а если As String, то Array() выдаст Type Mismatch. Нет проблем, напишите как правильно. http://www.vb6.us/tutorials/understanding-arrays Another way to do this is with the Array function, which is convenient to use, but incurs the overhead of the Variant datatype. The way to use the function is as follows: First, declare a Variant variable to hold your array. It may be declared with or without the open parentheses. Recall that since Variant is the default datatype, the "As Variant" clause is optional: Dim astrDayAbbrev() As Variant Second, use the Array function to assign a list of data items to the variable : astrDayAbbrev = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:53 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Советы: 1. If- ElseIf - … - ElseIf -_End If в VB немного быстрее, чем Select - Case - … - End Select 2. Использование Dictionary возможно даст выигрыш, но это нужно проверять для конкретного случая. 3. Если использовать массивы, то лучше, действительно, задать переменные массива явно текстовыми: Dim termWhite(0 To 63) As String а инициализацию массива делать, задавая значение каждого элемента без Array("…") То есть: White(0) = "00110101" и т.д. И в массивах makeUpWhite() и makeUpBlack() незачем шагать через 64, достаточно объявить их как Dim makeUpWhite$(1 To 40) , makeUpBlack$(1 To 40), а индекс перед обращением к массиву делить на 64. 4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Еще вариант - набить массив, а затем выполнить Join, так как в Join реализован именно такой быстрый способ конкатенации. 5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 08:41 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
ZVI3. Если использовать массивы, то лучше, действительно, задать переменные массива явно текстовыми: Dim termWhite(0 To 63) As String а инициализацию массива делать, задавая значение каждого элемента без Array("…") То есть: White(0) = "00110101" и т.д. И в массивах makeUpWhite() и makeUpBlack() незачем шагать через 64, достаточно объявить их как Dim makeUpWhite$(1 To 40) , makeUpBlack$(1 To 40), а индекс перед обращением к массиву делить на 64..Сделал: Код: vbnet 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. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276.
Для 52 страниц вместо 43 сек получил 42-43 сек, т.е. выигрыша никакого. Стоит ли проверять:ZVI1. If- ElseIf - … - ElseIf -_End If в VB немного быстрее, чем Select - Case - … - End SelectПредлагаете использовать ф-ции как в исходном варианте, но заменить case на If- ElseIf ? Стоит ли проверять:ZVI2. Использование Dictionary возможно даст выигрыш, но это нужно проверять для конкретного случая.И здесь поподробнее. Как это? ZVI4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Еще вариант - набить массив, а затем выполнить Join, так как в Join реализован именно такой быстрый способ конкатенации. Вы про это? Код: vbnet 1. 2. 3. 4. 5.
Вообще есть подозрение, что основная проблема именно при чтении bitmap, оптимизация получения значения бита (с библиотекой от AndreTM) дает чуть прирост скорости, но не очень сильный, причем это компенсируется той идеей что я сделал -не вычислять биты если байт =0 либо =255. Поэтому проблема возможно в конкатенации строк. Не подкрепите еще кодами? ZVI5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл.Не покажете как на примере кода? Набивать String, а потом делать Put у меня ничего не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 15:13 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
ZVIСоветы:4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Попробовал по 3-му ("самому быстрому") варианту: Код: vbnet 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.
Т.е. пока имеем, что извращаем код до человеко-непонимания, а скорость не растет. Ну, в вашем примере 20000 конкатенаций на строку. А у меня 1728 (максимум!!!) это если белое и черное идут через пиксель (что практически нереально), в реальности их гораздо меньше, м.б. пара десятков, ну сотня если текст. Огород по удвоению буферов скорее замедлит чем ускорит. ZVI5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл. Дайте пример кода. Хотя надежды что это поможет мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 20:09 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Хорошо, всё..., мы поняли, поняли... Я же говорил, что скорость можно получить только хитровы.. хитрыми методами Предлагал же перейти на Форт (тот же самый PostScript)? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 23:10 |
|
|
start [/forum/topic.php?fid=60&msg=37845488&tid=2157584]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 165ms |
0 / 0 |