|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Проще конечно с "достойным" примером (прилагается). Есть произвольная графика (in.tif в примере 2386х1620, ориентация -альбом). Вписываем ее в вертик. лист 1728х2340 и располагаем по центру. Наконец получилось (пока без вращения). Проблему пока не могу решить такую: подложка (поля) получается черная, а нужна белая. Полагаю проблема где-то здесь, но вчера за несколько часов ничего не родил: Код: 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.
Чтобы из in.tif (или любой другой bmp/jpg/tiff итп ) получить out.tif, надо мышкой кинуть исх. картинку на exe и нажать Save (можно выбрать диапазон страниц, если исх. уже многостраничный tiff) Первый вопрос: как сделать "фон" белым? Доп. вопросы (сразу): 1) как развернуть "альбомную" картинку в "портрет" (А4 вертикально) 2) там используется "черно-белый" при сохранении. Если конвертировать цветную картинку, то будет "сильно намазано черным", нормальные "принтеры" делают "в градациях серого" (при этом результирующий tiff будет того же формата что и у меня, но картинка будет смотреться совершенно по-другому). Позже могу скинуть примеры таких конвертаций. Т.е. как это облагородить? 3) как сделать tiff с параметром Reversed Bit Order (желательно), если конечно винды через из фильтры это вообще умеют. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 09:12 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Ну так что, неужели никто не знает как это hdcDst в белый цвет закрасить? если уж оно изначально черным создается? Или мне в ресурсы белый лист запихивать и делать ему render по желаемому размеру? чет не то.. вроде уж целиком проект выложил Ну, вообще-то по всем признакам это белый: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 14:50 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > Ну, вообще-то по всем признакам это белый: > With bmiDst.bmiColors( >> 1 << ) Белый, то белый. Но это второй элемент массива. А первый элемент не пробовал устанавливать? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 15:13 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Игорь Горбонос, если сделать еще и так Код: plaintext 1. 2. 3. 4.
Или знаешь ответ? Я не думал, что это так сложно. Эту ф-цию изначально Бенедикт подогнал, но изначально речь шла лишь о растяжении картинки по вертикали в 2 раза и сохранении в BMP напр.(это все есть в проекте), а не о проекции любой картинки на A4. По идее если взять другой picSrc2 As IPictureDisp чисто белый, то перед наложением основной картинки можно сделать picSrc2.Render CLng(hdcDst), <этот белый кусок размазать в размер листа> и это будет workaround ...счас думаю как родить эту "белую ворону", по идее подойдут CreateGradientBackground (белый, белый, белый.....) опять же от Бенедикта этой (по)пыткой счас и занимаюсь... Но это уже двойное извращение, там скорее всего надо правильно задать структуру..знать бы как. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 15:52 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дмитрий77 по идее подойдут CreateGradientBackground (белый, белый, белый.....) опять же от Бенедикта picSrc2.Render CLng(hdcDst), <этот белый кусок размазать в размер листа> Ну, так то конечно получилось, хотя и фигня полная Set g_picBackground = CreateGradientBackground(Form1.hWnd, 1, 2000, vbWhite, vbWhite, vbWhite) потому что Form1.hWnd -бред сивой кобылы А если делать 10,10 вместо 1,2000 то полоска снизу остается За отсутствием понимания как сделать сразу нормально, бухаем в ведро все че есть под рукой. Хотелось бы нормально. Короче чего намешал, во вложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 16:28 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > Или знаешь ответ? Насколько помню, в обычном рисовании холст в памяти всегда создавался черного цвета, для изменения фона нужно было перекрашивать. Или кистью с нужным цветом или копированием откуда-то кусочка нужного цвета. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 16:36 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > With bmiDst.bmiColors(0) > .rgbBlue = 255 > .rgbGreen = 255 > .rgbRed = 255 > End With > то будет черный квадрат, но уже вообще без возможности наложения рисунка А кстати! а если поменять цвета местами. Белый по нулевому индексу, а черный по первому. Что получится? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 16:37 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Игорь ГорбоносА кстати! а если поменять цвета местами. Белый по нулевому индексу, а черный по первому. Что получится? Ага,Творческий подход... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
1) черный фон как и раньше 2) наложение рисунка в негативе Игорь, можешь сам поиграться, че гадать. Первый проект. >для изменения фона нужно было >перекрашивать. Или кистью с нужным цветом Делать это по пикселям наверно глупо >или копированием откуда-то кусочка нужного цвета по сути я это и сделал во втором примере Тогда так: Как сделать программно белоснежный As IPictureDisp ? Без извращений с "градиентами"? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 17:01 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
> Автор: Дмитрий77 > Игорь, можешь сам поиграться, че гадать. Первый проект. Нету у меня VB а подключать к VBA нет времени Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 17:33 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дмитрий77, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Использован класс "cDIBSection". Взят на www.vbaccelerator.com и доработан по совету Бенедикта. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 18:35 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
шёл, Пасиб. Ик, и на душе сразу повеселело. Из всего сказанного мне нужна была одна строчка: Код: plaintext 1. 2. 3. 4. 5.
Ну, еще как бы вопросы остались: Дмитрий77Доп. вопросы (сразу): 1) как развернуть "альбомную" картинку в "портрет" (А4 вертикально) 2) там используется "черно-белый" при сохранении. Если конвертировать цветную картинку, то будет "сильно намазано черным", нормальные "принтеры" делают "в градациях серого" (при этом результирующий tiff будет того же формата что и у меня, но картинка будет смотреться совершенно по-другому). Позже могу скинуть примеры таких конвертаций. Т.е. как это облагородить? 3) как сделать tiff с параметром Reversed Bit Order (желательно), если конечно винды через из фильтры это вообще умеют. +конечно интеллект, когда переворачивать, когда нет, как лучше вписывать, но на это думаю мозгов хватит, основное это 1) и 2) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2011, 20:21 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Не врубаюсь как развернуть на 90 градусов. Вот нашел пример: http://www.activevb.de/tipps/vb6tipps/tipp0661.html Код: plaintext
Есть picSrc As IPictureDisp (a x b) по логике надо из него сделать picSrc2 As IPictureDisp (b x a) и полученную picSrc2 уже рендерить на целевой битмап. Но у picSrc нету hdc т.е. не понятно к чему привязывать lBitmap (который используется в процессе вращения), и потом у меня a не = b. Т.е. как быть? Где взять hdc на кот. вертеть? В PictureBox вписывать picSrc и вертеть сначала?? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 02:12 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дмитрий77, у меня пока аврал. Касательно заливки фона - PatBlt() откопали, можно FillRect(): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 03:04 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Бенедикт, спасибо что откликнулись Access есть, но с тем примером разобраться не сумел. Пошел по "немецкому примеру". Попытался все сделать в PictureBox, чтобы заранее не поганить ваш класс, продублировал GDI-декларации в форму. Что cделал: 1) загрузил первую страницу в PictureBox с применением Zoom (чтоб было видно на мелкой картинке че происходит) 2) Применил "немецкий алгоритм" Код: 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.
Что могу сказать: повернутая картинка отрисовывается поверх PictureFax.hDC (накладывается), но при этом lBitmap я так понимаю это исходная (горизонтальная) картинка потому как GdipSaveImageToFile сохраняет исходник (хотя и масштабированный, ну понятно, я ж с PictureBox работаю). То же самое если делать: Код: plaintext 1. 2.
Т.е. посмотрели на наше произведение, и хватит, даже сохранить не получится. Мне по сути надо что: Public Sub SaveMultiFrameAs1bppTIFFfax(... -которая в классе У меня есть исходный Frame(i) который As IPictureDisp так? У него размер a х b Если я на основании анализа размеров a и b принимаю решение о его довороте на 90 градусов, то мне нужно сделать из него другой FrameTemp As IPictureDisp b х a т.е. нужна функция Код: plaintext 1.
т.е. проецировать FrameTemp на целевой bitmap nBitmap(i) с его hdcDst с форматированием/масштабированием Код: plaintext 1. 2.
Т.е. вопрос по сути сводится к: Как написать ф-цию GetRotate90IPictureDisp, кот. очевидно должна использовать механизмы из Private Sub CommandRotate_Click (код что выше)? Увязать все это мне пока не по зубам... (На всякий случай текущий проект во вложении) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 13:53 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Так, пока понял чтоб отрисовать перевертыш в левом верхнем углу hdc надо Код: plaintext 1.
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 14:39 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Вот еще пример разворота: Как повернуть растровое изображение в 90-степень изменения но это все с одного hdc на другой hdc перекатать, а у меня IPictureDisp на входе и мне нужен IPictureDisp на выходе, т.е. нечего подать на вход (ну если только с PictureBox извращаться), и не за что ухватиться на выходе, потому что hdc это мыльный пузырь. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 15:40 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дмитрий77, пока короткий комментарий: 1) пример ужасен - BitBlt для каждой точки; 2) если делать ни от чего, кроме своего параметра, не зависящую функцию GetRotate90IPictureDisp(InFrame As IPictureDisp ) As IPictureDisp, то внутри будет слегка зоопарк из-за отсутствия в GDI универсального копирования формата битмапа; 3) >Т.е. посмотрели на наше произведение, и хватит, даже сохранить не получится. Должно лечиться Код: plaintext 1.
4) что значит "мыльный пузырь"? CreateCompatibleDC(), и получается memory DC. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 18:55 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Бенедикт1) пример ужасен - BitBlt для каждой точки; 4) что значит "мыльный пузырь"? CreateCompatibleDC(), и получается memory DC. Пример м.б. и ужасен, но он выводит новую картинку на другой DC А немецкий (который видимо то же что и ваша БД) лепит на тот же DC. В принципе у меня уже возникла идея: Frame -> DC1 (без разворота и форматирования) DC1->DC2 (тупой разворот без форматирования) DC2->DC3 (подгонка/вписывание в размер) DC3->Save При этом параллельно с каждым DC придется еще иметь Bitmap_attached_to_DC Ну т.е. процедуру с созданием упоминавшегося тут "черного прямоугольника" придется в общем случае утраивать. Приду домой, попробую помучиться еще... Но бардак у меня в голове с этими memory DC и memory Bitmap и PictureDisplay -ежли честно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2011, 19:31 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дима77А немецкий (который видимо то же что и ваша БД) лепит на тот же DC. А ну да, можно и на другой hdc налепить. Код: 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.
Бенедикт3) >Т.е. посмотрели на наше произведение, и хватит, даже сохранить не получится. Должно лечиться Код: plaintext 1.
Да, правы, "лечится". Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2011, 04:07 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Бенедикт, боюсь без вас таки закопаюсь я немного продвинулся но опять в тупике. Что есть (в приложенном проекте): 1.Кнопка Save & Format Вписывает (без разворота) исх. "альбом" в белый лист 1728х2340 и сохраняет в файл \out.tif Ф-ция SaveMultiFrameAs1bppTIFFfax Результат получается за счет проецирования исх. Frame (который As IPictureDisp) через ф-цию picSrc.Render c масштабированием (dx,dy) и заданием положения (x0,y0) на заранее заготовленном hdc-листе размера 1728х2340 2. Кнопка Save & Rotate Просто переворачивает "альбом" (a x b) в "портрет" (b x a) и сохраняет в файл \outrotate.tif Ф-ция SaveMultiFrameAs1bppTIFFRotateOnly Результат получается за счет GDI-разворота исх. Frame без масштабирования и проецирования развернутой картинки на заранее заготовленном hdc-листе размера b х a 3. Кнопка Rotate Для теста. Делает то же что и пункт 2 но рисует повернутое изображение на hdc соседней картинки PictureNew. Проблема в следующем: мне надо эти 2 действия совместить, т.е. 1) развернуть 2) вписать в размер 1728х2340 Но чтобы вписать в размер, мне нужно применить picSrc.Render, а объекта picSrc As IPictureDisp у меня на выходе из разворота то и нету. Я сделал попытку намалевать ф-цию Код: plaintext
но она получилась дохлой, с учетом ваших предыдущих негативных комментариев я даже не стал пытаться ее лечить. Мне кажется , что можно все сделать в одно действие Код: plaintext 1.
думается мне имеет 4 аргумента (x,y)-верхний левый угол; (dx,dy)-в какую ширину+высоту вписывать lngGraphics. Но как я не игрался со всеми аргументами всех функций, ответственных за разворот, у меня ничего не получается, т.е. картинка съезжает, изменяет размеры, но понять закономерностей не могу. Т.е. как я по-русски понимаю Код: plaintext
Ничего этого не происходит, я не понимаю этой геометрии, потерял ориентацию в пространстве, абсолютно не понимаю в какой координатной системе и относит. чего я нахожусь. S O S Предполагаю также, что "удачный разворот" удался случайно методом тыка-подбора. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2011, 19:19 |
|
Вписать "горизонтальную" картинку в 1728х2340, черные поля, а надо чтоб были белые!
|
|||
---|---|---|---|
#18+
Дмитрий77Проблема в следующем: мне надо эти 2 действия совместить, т.е. 1) развернуть 2) вписать в размер 1728х2340 Через одно место таки решил. Проблема в том, что при повороте с координатами чего-й то происходит, и осознать это я увы не в состоянии. Поэтому пришлось рисовать в 2 приема (хотя сильно подозреваю что можно в один.) 2. Кнопка Save & Rotate & Format Порачивает "альбом" (a x b) в "портрет" (b x a) и получаем hdcDst/hbmDst Потом тупо этот hbmDst такой же процедурой (разворот на 0 градусов) проецируем на hdcDst1/hbmDst1, но уже требумого размера, но при этом уже соображаем как делать Код: plaintext 1.
Ф-ция SaveMultiFrameAs1bppTIFFRotateFax Впрочем, если кто поможет осилить это в один прием, я стану чуть счастливее. Пока еще подожду помощи. Теперь задумался над: 2) там используется "черно-белый" при сохранении. Если конвертировать цветную картинку, то будет "сильно намазано черным", нормальные "принтеры" делают "в градациях серого" (при этом результирующий tiff будет того же формата что и у меня, но картинка будет смотреться совершенно по-другому). Позже могу скинуть примеры таких конвертаций. Т.е. как это облагородить? Но подозреваю что фотоэффект на 2-цветной картинке (ч/б глубина=1 а не глубина=8) делается какими-то нелинейными махинациями. Суть в чем: если уже есть такая "в сером" картинка, то мое преобразование ее не портит, а если бухаю на свой вход цветной оригинал, то на моем выходе получаю черную мазню. Хочу "в сером". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2011, 01:34 |
|
|
start [/forum/topic.php?fid=60&fpage=104&tid=2158812]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
203ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 323ms |
0 / 0 |