Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: GetSaveFileName и GetDIBits. приложение вылетает. Добавлено: 25.06.10 01:17  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Прошу помощи. VB6.
Ситуация такая.

1. Открываю диалоговое окно GetSaveFileNameA
2. Выбираю файл
3. Беру данные из картинки GetDIBits
4. Сохраняю их в PNG библиотекой png
5. Работаю - все нормально
6. Вызываю GetSaveFileNameA или GetOpenFileNameA или GetDIBits
7. Программа вылетает с громким грохотом. Иногда с ошибкой на память, а иногда и без всяких ошибок.

Не могу понять где накасячил и из-за чего все это. Библиотекой для сохранения png пользуюсь давно, ошибок таких не было.

вот исходник
http://www.vbcode.h1.ru/download/paintpro.src.zip

Чтобы долго не разбераться
код обработки GetSaveFileNameA
frmMain->OpenPicture

код сохранения PNG
frmOutput->Command1_Click

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #1
Добавлено: 25.06.10 01:28
выяснил некоторые подробности.
  1. bminfo.bmiHeader.biBitCount = 32
  2. ReDim dib(W * H * 4 - 1)
  3. GetDIBits IM.hdc, IM.Image, 0, H, dib(0), bminfo, 0

Если сохраняю картинку как 32 бита, то ошибки не вылезает, но мне нужно 24 бита, а с ними все вылетает.
Как это решить или обойти?

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 25.06.10 01:59
нашел такую штуку и заменил на неё, все заработало
  1. ReDim dib(((W * biBitCount \ 8 + 3) And &H7FFFFFFC) * H)
Но я не могу понять, почему именно так?

Ответить

Номер ответа: 3
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #3
Добавлено: 25.06.10 02:04
байты не считал, но думаю что в первом варианте у тебя массив слишком мал, и перезаписывается чужая память

Ответить

Номер ответа: 4
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 25.06.10 02:44
спасибо, но мне неясно почему мал. Ширина*Высоту*3байта - Этоже размер растра.

Ответить

Номер ответа: 5
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #5
Добавлено: 25.06.10 03:15
то ли там все равно по 4 байта, то ли выравнивание в конце строк. Предполагаю

Ответить

Номер ответа: 6
Автор ответа:
 Retupa



Вопросов: 1
Ответов: 51
 Профиль | | #6 Добавлено: 25.06.10 03:34
3байта + vbnullchar

Ответить

Номер ответа: 7
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #7
Добавлено: 25.06.10 13:30
наверное какое-то выравнивание.

Ответить

Номер ответа: 8
Автор ответа:
 Филюс



ICQ: 7116156 

Вопросов: 3
Ответов: 14
 Web-сайт: filyus.ru
 Профиль | | #8
Добавлено: 26.06.10 13:15
не наверно, а точно.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам