как поворачивать изображение с прозрачным фоном?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 26.08.2011 (Пт) 14:20

подскажите, как поворачивать картинку и удалять с нее определенный цвет как это делает TransparentBlt?
поворачиваю с помощью PlgBlt
0010.PNG

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 26.08.2011 (Пт) 14:22

Тебя интересует поворот сам по себе, поворот средствами какой-то сторонней библиотеки, или поворот средствами конкретно WinAPI?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 26.08.2011 (Пт) 15:42

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

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Debugger » 26.08.2011 (Пт) 16:11

1) Поворачиваешь спрайт (PltBlt) на буфер. Фон буфера - такой, какой у тебя прозрачный цвет.
2) Рисуешь (TransparentBlt) из буфера на форму, или куда там ещё.

Советую посмотреть на SR2D, просто, удобно и довольно шустро.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 26.08.2011 (Пт) 16:47

Penumbra писал(а):а как удалить фон я пока что не знаю

Брайан Сайлер, Джефф Споттс. Использование Visual Basic 6.
Стр. 509 - 513. Использование Windows API для создания прозрачных изображений.
509 - 513.7z
(1014.58 Кб) Скачиваний: 97
Но сам не пользовался.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 26.08.2011 (Пт) 16:57

Penumbra писал(а):любыми средствами, хоть WinAPI

Когда мне было боязно писать подобное с нуля самому, я использовал библиотеку foxcbmp.dll. Работает быстро, поворот + антиалиасинг + блендинг.

Сейчас в зависимости от задачи, я бы написал оптимальный вариант с нуля.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 26.08.2011 (Пт) 17:21

Хакер писал(а):Работает быстро, поворот + антиалиасинг + блендинг.

Всё это есть в SR2D третьей версии.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 26.08.2011 (Пт) 17:48

Разве я отрицал?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 26.08.2011 (Пт) 21:52

А разве я написал, что ты отрицаешь? :)

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 26.08.2011 (Пт) 21:54

Тон предполагает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 27.08.2011 (Сб) 0:32

SR2D Класс! супер! нет слов! то что надо! спасибо!
+за foxcbmp.dll тоже спасибо)

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 27.08.2011 (Сб) 4:13

Mikle , я не понял как в SR2D вращать с прозрачным фоном ?
DrawRotate просто поворачивает изображение спрайта источника на спрайте приемнике

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 27.08.2011 (Сб) 9:45

Сначала вращаешь во временный спрайт, потом его на бэкбуфер через OpAlphaBlend.
Или, если не альфаканал, а прозрачный цвет, то при вращении отключаешь атниалиазинг, потом OpAlphaTest вместо OpAlphaBlend.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 27.08.2011 (Сб) 11:21

Вот пример, делал для другого, тут по клавишам "3" и "4" вращение.
Вложения
Test.zip
(128.77 Кб) Скачиваний: 84

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 27.08.2011 (Сб) 17:19

ваши проекты запускаю все работает, меняю редактирую все нормально,
подключил к своему проекту SR2D_Sprite.cls и modSR2D.bas
SR2D.dll скопировал в папу с программой

при запуске на строке
SprIn.LoadFromFile "C:\onv.png" (файл существует) выдает ошибку
file not found: SR2D
в классе это строка
CopyMemory ByVal lData.scan0, cBuf(0), X * Y * 4

после этого при попытки редактирования кода падает VB6
055.PNG

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 27.08.2011 (Сб) 17:30

SR2D_Sprite.cls, modSR2D.bas и SR2D.dll обязательно должны быть из одной версии.
А если onv.png вставить в мой проект вместо tree1.png, тоже не работает?

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 27.08.2011 (Сб) 17:35

SR2D_Sprite.cls, modSR2D.bas и SR2D.dll и вашего проекта Test.vbp
в вашем проекте работает прописываю ...LoadFromFile "C:\onv.png" вместо tree1.png все работает а мой падает :(

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 27.08.2011 (Сб) 18:44

Скинь проект, разберусь.
И давай на "ты"?

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 27.08.2011 (Сб) 18:58

разобрался, из-за чего падает
падает если я рисунок выбираю черес стандартное диалоговое окно GetOpenFileName

Код: Выделить всё
Option Explicit

Public Type OPENFILENAME
    lStructSize As Long
    hWndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    Flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
Public Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
'*******************

Public Sub OpenDialog()
    Dim OFName As OPENFILENAME
    BaseFile = ""
   
  '  OFName.lpstrInitialDir = LastOpenPath

    OFName.lStructSize = Len(OFName)
    OFName.hWndOwner = frmMain.hwnd
    OFName.hInstance = App.hInstance
    OFName.lpstrFilter = filtr2 + Chr(0) + filtr21 + Chr(0) + filtr3 + Chr(0) + filtr31 + Chr(0) + filtr4 + Chr(0) + filtr41 + Chr(0) + Chr(0)
    OFName.lpstrFile = Space$(254)
    OFName.nMaxFile = 255
    OFName.lpstrFileTitle = Space$(254)
    OFName.nMaxFileTitle = 255
    OFName.lpstrTitle = "Добавить файл в библиотеку"
    OFName.Flags = 1
        If GetOpenFileName(OFName) Then
        BaseFile = Trim$(OFName.lpstrFile)
        If RCP(App.Path) = Left(BaseFile, InStrRev(BaseFile, "\")) Then BaseFile = Mid(BaseFile, InStrRev(BaseFile, "\") + 1)
    End If

End Sub




Call OpenDialog
SprIn.LoadFromFile BaseFile
так падает
а если закомментировать
Код: Выделить всё
    'Call OpenDialog
BaseFile="C:\onv.png"
SprIn.LoadFromFile BaseFile
то так работает


причем падает всегда после вызова GetOpenFileName даже в другом окне
пошагово выглядит так:
1 запускаю проект
2 вызаваю гдето в проекте
Код: Выделить всё
Private Sub Command2_Click()
Call OpenDialog
End Sub
неважно где..
3 выполняю код
Код: Выделить всё
Private Sub Command4_Click()
    SprIn.Init , , OpAlphaBlend
SprIn.LoadFromFile "C:\onv.png"
End Sub

4 выдает ошибку
file not found: SR2D
на строке SprIn.LoadFromFile "C:\onv.png"

в классе это строка
Код: Выделить всё
CopyMemory ByVal lData.scan0, cBuf(0), X * Y * 4

5 если в редакторе потом сменить раскладку клавиатуры с рус на англ падант редактор

папка с проектом весит 18Мб :cry: в архиве 4

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: как поворачивать изображение с прозрачным фоном?

Сообщение iGrok » 27.08.2011 (Сб) 23:23

Ммм.. Ну, при вызове этого диалога и выборе файла у тебя меняется текущая директория.
И, похоже, дальше при "стандартном" поиске библиотеки (текущая директория, системные папки, и т.п.) она просто не находится.

Два решения "в лоб":
1) Скопировать Sr2d.dll в system32 (и делать это впоследствии при инсталляции программы на другой комп).
2) После вызова диалога принудительно сменить текущую директорию на "оригинальную".
label:
cli
jmp label

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.08.2011 (Сб) 23:32

Возможно, диалог открытия файла меняет CurDir. Попробуйте делать ChDir App.Path перед выполнением SprIn.LoadFromFile.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 27.08.2011 (Сб) 23:35

iGrok писал(а):1) Скопировать Sr2d.dll в system32 (и делать это впоследствии при инсталляции программы на другой комп).

Ужасный совет. Такое действие:
1. Требует установку программы.
2. Требует права администратора при установке программы.

Penumbra
Обычный пользователь
Обычный пользователь
 
Сообщения: 62
Зарегистрирован: 24.01.2009 (Сб) 13:36

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Penumbra » 28.08.2011 (Вс) 0:37

ха, iGrok и Qwertiy , вы оказались правы))
ChDir App.Path решило все проблемы ), старею...

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 28.08.2011 (Вс) 7:50

Перед ChDir App.Path желательно ещё ChDrive App.Path выпонить.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: как поворачивать изображение с прозрачным фоном?

Сообщение iGrok » 28.08.2011 (Вс) 10:31

Qwertiy писал(а):Такое действие:
1. Требует установку программы.
2. Требует права администратора при установке программы.

Какой кошмар! :shock:
Что же делать???!!1одинодин

Я, вроде, и написал про инсталляцию. А права администратора - вполне логичное требование при установке какого-либо ПО. Установка ПО в систему - привилегия администратора этой системы, и это нормально. А насчёт ужасности - были предложены два варианта. Кстати, я предпочитаю вместо пары ChDrive + ChDir делать один SetCurrentDirectory.
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 28.08.2011 (Вс) 10:48

И сколько мороки, ради использования SR2D, вместо того, чтобы взять и использовать foxcbmp.dll
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Mikle » 28.08.2011 (Вс) 11:20

Хакер писал(а): сколько мороки, ради использования SR2D, вместо того, чтобы взять и использовать foxcbmp.dll

Я вообще не представляю, откуда эта морока. Это всё не нужно, у автора темы проблема где-то в другом месте. SR2D специально написан так, чтобы не требовать от пользователя никаких лишних действий. Я создаю ярлык на любое приложение, использующее SR2D и специально меняю рабочую папку - всё прекрасно работает, естественно при условии, что пути к контенту в программе указаны правильно.
foxcbmp.dll ? Заинтересовал, посмотрю. Конкурент? :roll:

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: как поворачивать изображение с прозрачным фоном?

Сообщение Хакер » 28.08.2011 (Вс) 11:26

Mikle писал(а):foxcbmp.dll ? Заинтересовал, посмотрю. Конкурент? :roll:

Нет, маленькая библиотека, как раз под стать задаче. Умеет вращать, блендить и управлять гаммой.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 69

    TopList