|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Уж очень прозрачного тулбара хочется. Идея явно рабочая. Форма, на ней PictureBox, в нем картинка: Код: vbnet 1. 2.
В PictureBox нарисован Rebar(API), в нем соотв. Toolbar (в банде). Ну надо думать, что реальные координаты Rebar (x,y, dx, dy) я как нибудь найду -в принципе x,y, dx -заданы при его создании, плавать может чуть высота dy (разные размеры кнопок и т.п.) В принципе чтоб бухнуть фоновую картинку в подложку, достаточно Код: vbnet 1. 2. 3. 4. 5. 6.
ну или с IPictureDisplay Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Но это будет вся картинка, "взятая сверху" Но мне вся картинка не нужна, а нужен только кусочек под ребаром, с пикселями потом поиграюсь. Я подобную задачу решал для всяких ListView, но там я игрался с hdc, с CreateCompatibleBrush и т.п. Здесь вроде как чистая статика и все еще проще. Но я не понимаю как сделать этот маленький bitmap из большого, потом его видимо засунуть в IpictureDisplay (с этим вроде ясно). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2013, 04:23 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Хорошо, поставим вопрос по другому. Форма в пикселях, на ней 2 picturebox-а -тоже в пикселях. 1) PictureFon 2) PictureCopy Код: vbnet 1. 2.
Мне нужен кусок картинки PictureFon Я знаю x,y, dx, dy куска кот. мне нужен Как мне отобразить этот кусок на PictureCopy Я пытаюсь сделать что-то типа: Код: vbnet 1.
По моим соображениям у меня должен скопироваться верхний левый кусок 200х200px У меня там фигня из черно-серых квадратов рисуется. Я эти координатные преобразования понять не могу, я нарочно везде сделал px, чтоб не связываться с делением-умножением на 15. Оно явно берет не тот кусок и не в том масштабе. Это не по API вопрос, а по чистому VB6. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2013, 19:57 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Дмитрий77, по Render: он ожидает координаты в исходном изображении в himetric units - сотых долях мм (т. е. в тех же единицах измерения, в которых идёт Width и Height). Кроме того, DIB-ы, формируемые LoadPicture() для JPEG-ов (да и вообще большинство на практике попадающихся DIB-ов), имеют порядок следования скан-линий снизу вверх (bottom up), из-за чего для Render надо указывать для исходного куска нижнюю скан-линию и отрицательную высоту: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 13:30 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Бенедикт, мне этот render что-то сразу не понравился. Я сделал по другому, типа гибрид из своего приема с CreatePatternBrush и твоего CreateIPictureDispFromHBITMAP (тест-проект во вложении): Код: 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.
Вроде как это работает. Но мне чего-то эта идея с прозрачным тулбар разонравилась. Я то хотел дать возможность пользователю выбирать между Transparent/Communication/Media и т.п. Но чтобы сделать Transparent, надо 1) задвинуть ребар в контейнер-Picturebox на 2px -проблема проиллюстрирована здесь: Что можно сделать с той частью Rebar которая до Band - это 2 пикселя. 2) подогнать высоту контейнера-Picturebox под высоту Rebar -после создания 3) как-то нарисовать границу этого ребар - видимо как границу PictureBox-контейнера (границ кнопок то не видно даже, если не наводить мышку, надо ж как то обозначить его) Типа вот так Код: vbnet 1. 2. 3. 4. 5.
И смотрится это честно говоря не так красиво, как тематический Communication/Media подобранный под фон картинки. А если потом в этой конструкции менять стиль назад на Communication, то понимаешь что 1) eBorderStyleConstants.bsThin надо убирать, т.к. тематический рисует свою "границу" 2) задвинуть ребар в контейнер-Picturebox на 2px -срезает левую границу тематического ребар, т.к. в случае "честной темы" эти 2px составляют единое целое тематики Короче, очень мудреные коды надо делать, отказался я от этой идеи. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 18:36 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Дмитрий77А если потом в этой конструкции менять стиль назад на Communication, то понимаешь что... Хотя конечно при смене стиля можно всю конструкцию полностью перерисовывать с учетом сказанного... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 19:02 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Бенедикт, м.б. все таки воспользуюсь своим вариантом кода. Не взглянешь профессионально на мою CreateTransparentBackGround()? Меня смущает, что слишком там много hdc-hbm, SelectObject и т.п. Такое ощущение что больше чем нужно. Так то она рабочая. Но не получилось бы каких-нибудь утечек из-за неудаленных hdc-hbm и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2013, 20:24 |
|
Помогите из bitmap (из Picturebox) правильный кусочек вырезать, туплю-с.
|
|||
---|---|---|---|
#18+
Да, не. Вставил в проект, вроде все отлично получилось (внешне). При смене стиля с прозрачного на тематическую всю конструкцию пересоздаю с учетом 2-х "левых" пикселей. Но все же хотелось бы чтоб кто-то проверил этот код на предмет корректности и потенциальных утечек, я хоть и родил этот гибрид но до конца лесенки из этих SelectObject не понимаю. Дмитрий77Я сделал по другому, типа гибрид из своего приема с CreatePatternBrush и твоего CreateIPictureDispFromHBITMAP (тест-проект во вложении): Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2013, 06:26 |
|
|
start [/forum/topic.php?fid=60&msg=38238932&tid=2157017]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
99ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 243ms |
total: | 439ms |
0 / 0 |