Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какой выбрать способ вывода картинки 
:(
    Опции темы
20071231
Дата 18.6.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Моя проблема такая. Мне надо выводить картинку с маской на VB. Картинок будет много разных одновременно. Во время вывода нужно иметь возможность её вращать. И надо чтобы всё это не тормозило и не мигало.

У меня был один ocx, в нём есть функция вывода картинки с маской и вращения от центра с задаваемым углом и цветом маски. Но, она брала картинку только из Picture и ни откуда больше. Из-за этого прога сильно тупила. Обычно я загружал картинку в оперативную память и оттуда выводил куда и как надо. А здесь только через PictureBox. Может кто знает как объект в оперативке StdPicture сделать со свойствами PictureBox или чё-нибудь в этом роде, чтобы она в эту функцию влазила.
Ну или ещё какие кто знает способы, ссылки. 

Заранее спасибо
PM MAIL   Вверх
kapbepucm
Дата 18.6.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



A BitBlt не подходит?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 18.6.2007, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



А разве он вращает? Если вращает, напиши как пользоваться или ссылочку
PM MAIL   Вверх
kapbepucm
Дата 18.6.2007, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



  Не, ну используя простейшую тригонометрию, думаю результата добится при большом желании возможно (даже где-то встречал, если честно), другой вопрос, если картинка большая надо избавлятся от мерцания, при движении, но для маленких подходит вполне (я курсовую работу на Delphi так делал). Поищу про повороты, но обещать ничего не могу- давно это было... А не будет быстрее повернуть в графическом редакторе, все варианты сохранить, ну и потом, по мере надабности выводить нужный экземпляр? Ибо тригонометрия- штука долгая в RunTime и нудная в разработкеsmile
  Мне тут посоветовали обратиться к DirectX, но я там пока не очень силён. 

Это сообщение отредактировал(а) kapbepucm - 18.6.2007, 21:07


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 19.6.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Да ну хранить все картинки это не вариант, у меня их много и для каждой все повороты, я над этим думал, мне надо вращать в процессе.

А про тригонометрию я не совсем догнал, расскажи поподробнее.
А Directx я слышал дело хорошее, тока тоже не знаю как им пользоваться.

PM MAIL   Вверх
kapbepucm
Дата 19.6.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Извините за качество, рисовал быстро. На картинке показан поворот точки A относительно начала коорд. плоскости на определённый угол. Координаты: A(0;r); A1(r*sin(угла); r*cos(угла)). Хотя не советую использовать, способ не самый лучший.

Это сообщение отредактировал(а) kapbepucm - 19.6.2007, 11:04

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  grafik.JPG 7,47 Kb


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 19.6.2007, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



А, ну я в своё время делал такую фигню. Так ты что мне предлагаешь каждую точку картинки вращать по отдельности? а каким методом потом выводить каждую точку? .pset чтоли? Так я пробовал, тупит страшно. Или ты ещё чёто знаешь? 
Давай говори всё сразу и по порядку.

Это сообщение отредактировал(а) 20071231 - 19.6.2007, 11:04
PM MAIL   Вверх
kapbepucm
Дата 19.6.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Я давно делал похожий проект. Там в начале создавались в памяти все картинки, ну и потом по мере надобности выводились. Вывод всей (уже готовой) картинки быстрее чем попиксельный вывод, но если нет места в памяти- это другой вопрос. Моё мнение- лучше покопай DirectX.

Это сообщение отредактировал(а) kapbepucm - 19.6.2007, 11:49


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 19.6.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Ну допустим у меня в памяти в массиве координаты каждой точки картинки, я их взял, повернул, и как потом её цельной картинкой вывести? Можно из этого массива сделать в памяти полноценную картинку?
PM MAIL   Вверх
kapbepucm
Дата 19.6.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Я предлагаю для каждой картинки сделать свой массив, ещё лучше- не массив а хрень (не знаю, как она порусcки называется) через CreateCompatibleDC. Короче, там, в CompatibleDC прорисовать каждую картинку, которую будем использовать, ну, и по мере надобности выводить, используя BitBlt. У меня выводилось практически мгновенно, только картинки были не гигантскими. Наверное, этот способ не очень экономит память, зато не сложно в реализации. Для серъёзного проекта данный способ не советую- зачем изобретать велосипед?

Это сообщение отредактировал(а) kapbepucm - 19.6.2007, 15:40


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 19.6.2007, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Не ну так ты напиши это чё за CreateCompatibleDC. Как им пользоваться, напиши поподробнее
PM MAIL   Вверх
kapbepucm
Дата 19.6.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Извини, только завтра- у меня всё на рабочем месте. Так что- моя идея понравилась?

Это сообщение отредактировал(а) kapbepucm - 19.6.2007, 18:44


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 19.6.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Ну ты напиши, а я посмотрю, попробую
PM MAIL   Вверх
kapbepucm
Дата 20.6.2007, 08:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Декларация API:
Код
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal HWND As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32.dll" (ByVal DC As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32.dll" (ByVal DC As Long, ByVal Width As Long, ByVal Height As Long) As Long
Private Declare Function SelectObject Lib "gdi32.dll" (ByVal DC As Long, ByVal OBJECT As Long) As Long
Private Declare Function SetPixel Lib "gdi32.dll" (ByVal DC As Long, ByVal X As Long, ByVal Y As Long, ByVal Color As Long) As Long
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal DestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal Width As Long, ByVal Height As Long, ByVal SrcDC As Long, ByVal XSrc As Long, ByVal YSrc As Long, Optional ByVal Rop As Long = 13369376) As Long
Private Declare Function DeleteObject Lib "gdi32.dll" (ByVal OBJECT As Long) As Long
Private Declare Function DeleteDC Lib "gdi32.dll" (ByVal DC As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal HWND As Long, ByVal hDC As Long) As Long

Далее сам код:
Код
  Dim HWND As Long
  Dim DC As Long
  Dim comDC As Long
  Dim comBMP As Long

  HWND = GetForegroundWindow
  DC = GetDC(HWND)
  comDC = CreateCompatibleDC(DC)
  comBMP = CreateCompatibleBitmap(DC, 200, 200)'не помню, но пределы вроде-бы надо было +1, но суть не в этом
  SelectObject comDC, comBMP

' здесь я рисовал в comDC всё
  SetPixel comDC, 100, 100, &HFFFFFF

'ну и потом выводил на форму
  BitBlt DC, 0, 0, 200, 200, comDC, 0, 0

  DeleteObject comBMP
  DeleteDC comDC
  ReleaseDC HWND, DC

Я надеюсь, суть понятна. Буду очень рад, если чем-нибудь смог/смогу помочь!

Это сообщение отредактировал(а) kapbepucm - 20.6.2007, 12:19


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
20071231
Дата 22.6.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 26.5.2007
Где: Россия, Белая Кал итва

Репутация: нет
Всего: нет



Напиши побольше коментариев в первом абзаце после объявлений. А то я там не пойму чёто.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0795 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.