|
Вопросы по работе с bimap/graphics -многостраничный TIFF, отображение, сохранение итд
|
|||
---|---|---|---|
#18+
В VB6 я использовал класс CMultiFrameImage, любезно предоставленный когда-то Бенедиктом. 8283653 Много чего сам доделывал под себя. Вкратце, это GDI+, работа с многостраничными документами (коими являются TIFF), позволяет масштабировать картинку, сохранять в файл в различных форматах, с преобразованиями цвета (напр. цв-> чб), разрешения и т.п. Тащить API-шное GDI+ в .Net не вижу смыла ибо в .Net есть объекты Bitmap/Graphics т.е. по сути полноценная обертка GDI+. Начал писать класс. Первая задача - масштабирование, т.е. надо вписать картинку в PictureBox по ширине PictureBox, расположить сверху и не растягивать вниз. Накатал пока (лишнее опустил): Код: 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.
Смысл. Класс загружает файл в m_Bitmap, функция Zoom генерит другой Bitmap, который отображается в Picturebox1. При этом важно отпустить файл при смене картинки, либо когда уже не нужно ее отображать (функция Clear()). Вопросы: 1. Код: vbnet 1. 2. 3.
Надо ли что-то делать с уничтожением gr? Т.е. надо ли делать gr.Dispose() перед End Using в этой конструкции или такой блок обеспечивает это автоматически? Считаю что не надо. 2. Ф-ция Zoom возвращает новый bmDst As New Bitmap (нигде его не сохраняю), который я сразу присваиваю PictureBox1.Image. Можно ли так делать и не исчезнет ли картинка в PictureBox1 при сборке мусора и т.п? В VB6 я возвращал Create IPictureDisp FromHBITMAP(hbmDst), присваивал его Picture1.Picture причем самому hbmDst внутри Zoom DeleteObject не делал, с IPictureDisp какая-то автоматика с этим. 3. Метод Clear() за счет m_Bitmap.Dispose() разблокирует исходный файл (можно его удалить напр. после этого). a) Надо ли его вызывать в Protected Overrides Sub Finalize(), в принципе оно и так его освобождает. В VB6 было: Код: vbnet 1. 2. 3. 4.
б) В VB6 для освобождения файла было достаточно Set m_mfi = Nothing при том что объявлен as New он был один раз в заголовке формы. После чего можно было снова делать m_mfi.LoadFromFile без нового New() Здесь это все не катит, поэтому придумал m_Bitmap.Dispose() + m_Bitmap=Nothing. Правильно? 4. Есть ли еще какие замечания по коду класса, пока не углубился? Если честно, и в VB6 классы не особо любил. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2015, 20:13 |
|
|
start [/forum/topic.php?fid=20&msg=38896546&tid=1401835]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 349ms |
total: | 473ms |
0 / 0 |