Масштабирование bmp картинки в терминале.

 

Всем привет, я хоть и программист со стажем, но вот реально не понимаю, почему не сделано простых функций для масштабирования картинок, может я чего то не знаю?

Например есть картинка bmp подключенная как ресурс размером 500х500 пикселей, надо масштабировать ее в в произвольный масштаб к примеру до 200х200 и увеличить на 1000х1000 (но размер будет меняться постоянно, поэтому вариант заготовить сразу несколько размеров не подходит.

Дайте мне волшебный пендель, чтобы я дальше копал в правильном направлении. Canvas разбирать или может есть готовые библиотеки\решения в свободном доступе, где есть уже нужный функционал? 

 
Alexandr Gavrilin:

Всем привет, я хоть и программист со стажем, но вот реально не понимаю, почему не сделано простых функций для масштабирования картинок, может я чего то не знаю?

Например есть картинка bmp подключенная как ресурс размером 500х500 пикселей, надо масштабировать ее в в произвольный масштаб к примеру до 200х200 и увеличить на 1000х1000 (но размер будет меняться постоянно, поэтому вариант заготовить сразу несколько размеров не подходит.

Дайте мне волшебный пендель, чтобы я дальше копал в правильном направлении. Canvas разбирать или может есть готовые библиотеки\решения в свободном доступе, где есть уже нужный функционал? 

Копание в ... ни к чему не приведут. Даже не все графические редакторы это умеют делать, а вы хотите это от mql...

 
Alexandr Gavrilin:

Всем привет, я хоть и программист со стажем, но вот реально не понимаю, почему не сделано простых функций для масштабирования картинок, может я чего то не знаю?

Например есть картинка bmp подключенная как ресурс размером 500х500 пикселей, надо масштабировать ее в в произвольный масштаб к примеру до 200х200 и увеличить на 1000х1000 (но размер будет меняться постоянно, поэтому вариант заготовить сразу несколько размеров не подходит.

Дайте мне волшебный пендель, чтобы я дальше копал в правильном направлении. Canvas разбирать или может есть готовые библиотеки\решения в свободном доступе, где есть уже нужный функционал? 

https://www.mql5.com/ru/forum/227736/page8#comment_7101392
Canvas - это круто!
Canvas - это круто!
  • 2018.04.12
  • www.mql5.com
Поставил себе задачу: коротким кодом эффектно продемонстрировать возможности пользовательской графики через класс CCanvas...
 
Nikolai Semko:
https://www.mql5.com/ru/forum/227736/page8#comment_7101392

Жаль тут лайков нельзя ставить! Огромное спасибо, реально классное решение и просто использовать. Почему копирайты в коде не ставите? 

 
Alexandr Gavrilin:

Жаль тут лайков нельзя ставить! Огромное спасибо, реально классное решение и просто использовать. Почему копирайты в коде не ставите? 

Спасибо. В том коде глюки помню были, да и реализован не самым лучшим способом. Сейчас бы совсем по другому всё сделал, если бы стояла задача.
 
Nikolai Semko:
Спасибо. В том коде глюки помню были, да и реализован не самым лучшим способом. Сейчас бы совсем по другому всё сделал, если бы стояла задача.

Решение рабочее, адаптировал под мт4. Спасибо. В мт4 нет функции ArraySwap , поэтому добавил ее и в стандартном канвасе пришлось m_pixels сделать публичным. Плохо, что изначально не добавлено функции позволяющей напрямую обратиться к этой переменной по индексу, только по x, y. Но это можно решить просто создав свой класс с похожим названием.

Файлы:
Scaling_mt4.zip  395 kb
 
Alexandr Gavrilin:

Решение рабочее, адаптировал под мт4. Спасибо. В мт4 нет функции ArraySwap , поэтому добавил ее и в стандартном канвасе пришлось m_pixels сделать публичным. Плохо, что изначально не добавлено функции позволяющей напрямую обратиться к этой переменной по индексу, только по x, y. Но это можно решить просто создав свой класс с похожим названием.

А ресурсом нельзя этот инкльюдтъ сделать?

 
Alexandr Gavrilin:

Решение рабочее, адаптировал под мт4. Спасибо. В мт4 нет функции ArraySwap , поэтому добавил ее и в стандартном канвасе пришлось m_pixels сделать публичным. Плохо, что изначально не добавлено функции позволяющей напрямую обратиться к этой переменной по индексу, только по x, y. Но это можно решить просто создав свой класс с похожим названием.

В таких случаях пользуюсь более простым решением ( по совету @fxsaber):

#define protected public
#include <Canvas\Canvas.mqh>
#undef protected
 
Nikolai Semko:

В таких случаях пользуюсь более простым решением ( по совету @fxsaber):

о спасибо, я не так силен в нюансах ооп. Буду знать теперь. Не думал что переопределить protected разрешается. В С++ уже нельзя такими приемами пользоваться. (Visual c++ с 11 версии такое)

 
Evgeniy Zhdan:

А ресурсом нельзя этот инкльюдтъ сделать?

В смысле ресурсом, что именно? bmp естественно ресурс.

Вы вообще код примера по масштабированию смотрели или просто надо было хоть что то написать?

зы Жаль на форуме минусовать нельзя.
Причина обращения: