Бинарная картинка

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

Бинарная картинка

Сообщение DirectXManiac » 19.02.2008 (Вт) 0:30

Мне стыдно задавать такого рода вопросы, но уже несколько дней не могу понять в чем собственно дело... Итак имеется некая структура, в которой содержатся данные. Эти данные ничего общего не имеют в вопросов, кроме одного массива TextureData()
После сбора данных в это массив складываются цвета пикселей картинки:
Код: Выделить всё

For x = 0 to SizeX - 1
For y = 0 to SizeY - 1
TextureData(x,y) = Picture1.Point(x,y)
Next y
Next x

После чего идет сохранение... После сохранения некоторых данных сохраняю этот массив
Put #1,,TextureData()

Все работает, ничего не падает. Но после загрузки этого массива и отображения на том же PictureBox-е(в другом проекте) получается полная несурядица. Картинка загружается треугольниками(2мя) и они как будто перепутаны местами... Открыв файл я увидел это...
Открыл я его блокнотом и увидел диогональ из пробелов(которая при отображении делить картинку на 2 тр-ка черным цветом)

Насколько я понял загрузка не причем, может именно сохранение, почему? При сохранении только данных картинки проблема не уходит...
Естественно сначала делаю Redim перед загрузкой...
#define ROFL 0xDDDD

HiSER
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 88
Зарегистрирован: 04.07.2007 (Ср) 18:17

Сообщение HiSER » 19.02.2008 (Вт) 3:23

Возможно загружаешь не в том порядке, в котором сохранил.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.02.2008 (Вт) 8:21

Покажи код сохранения.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Mikle » 19.02.2008 (Вт) 11:48

DirectXManiac
Диагональ из пробелов, скорее всего, из-за неверного размера массива, для картинки 800*600, массив должен быть Arr(799,599), потому, что от нуля.
Цикл Y должен быть внешним, картинка от этого не поменяется, но, если открывать блокнотом, будет выглядеть корректнее.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 19.02.2008 (Вт) 17:56

Весь код сохранения Put #1,,TextureData()
Все... Массив 255х255(картинка 256 на 256). С этим все верно...
Код: Выделить всё
        Put #1, , mat.Version
        Put #1, , mat.Params.numTextures
        Dim i As Long
        '//Ðèñóíêè
        For i = 0 To mat.Params.numTextures - 1
            Put #1, , mat.Params.Textures(i).Version
            Put #1, , mat.Params.Textures(i).Name
            Put #1, , mat.Params.Textures(i).SizeX
            Put #1, , mat.Params.Textures(i).SizeY
            Put #1, , mat.Params.Textures(i).TexturesData
        Next i
        For i = 0 To mat.Params.numTextures - 1
            Put #1, , mat.Params.Stages(i).ColorOP
            Put #1, , mat.Params.Stages(i).ColorArg1
            Put #1, , mat.Params.Stages(i).ColorArg2
        Next i
        Put #1, , mat.Params.UseAdditionalScript
        If mat.Params.UseAdditionalScript = 1 Then
            Put #1, , mat.Script.Script
        End If

Вот весь код сохранения. Код заполнения выше...
[Added]:
Mikle
Ты прав, спасибо за наводку, оказалось в дебрях кода действительно не правильно заданы границы массива, этого я не заметил. Всем спасибо!
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 20.02.2008 (Ср) 11:16

Собственно вопрос другого рода, но т.к. тема не старая задам сюда... Если буду часто задавать вопросы надо будет переименовать тему :D
Итак вопрос относится все к тому же грандиозному проекту,но на этот раз строки. Итак пишу функци для получения строки из RichTextBox. Посылаю EM_GETLINE и получаю массив... Далее делаю
Line = Left$(StrConv(lBuffer,vbUnicode),LineLenght)
Но при таком подходе почему то криво передается русский текст... Т.е. он вообще не передается, а передаются какие то левые(ну ясно откуда они берутся) символы. Как правильно получить из этого массива строку? Или как подругому корректно и быстро получить содержимое нужной мне строки(по индексу) из RichTextBox-а?
#define ROFL 0xDDDD

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 20.02.2008 (Ср) 11:47

Вот у меня вроде всё нормально работает.

Код: Выделить всё
Public Function GetLineText(ByVal hWnd As Long, ByVal Line As Long) As String
Dim Buff As String, nLen As Long, Index As Long
  Index = SendMessage(hWnd, EM_LINEINDEX, Line - 1, ByVal 0&)
  If Index < 0 Or Line <= 0 Then Exit Function
  nLen = SendMessage(hWnd, EM_LINELENGTH, Index, ByVal 0&)
  Buff = Space(nLen + 1)
  Call SendMessage(hWnd, EM_GETLINE, Line - 1, ByVal Buff)
  GetLineText = Left(Buff, nLen)
End Function

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 21.02.2008 (Чт) 19:34

Atoman
Покажи декларацию SendMessage. Дело в том что можно отправлять и юникодную команду
#define ROFL 0xDDDD

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 21.02.2008 (Чт) 20:42

Вот пожалуйсто.

Код: Выделить всё
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 22.02.2008 (Пт) 1:16

Ага, понял :) "A" значит... Все равно не работает. Раньше возвращало какой то бред, а теперь "???"... Это меня убьет :(
#define ROFL 0xDDDD

Atoman
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 109
Зарегистрирован: 01.02.2008 (Пт) 6:36

Сообщение Atoman » 22.02.2008 (Пт) 2:43

Вот посмотри, у меня тут всё равотает.
Вложения
EM_GETLINE.zip
(10.78 Кб) Скачиваний: 67

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Сообщение DirectXManiac » 22.02.2008 (Пт) 2:58

Atoman
Отдельно то все работает а вот в связке с rtf подсветкой нет :wink: Видимо контрол криво сделан, вообщем вопрос снят всем спасибо... Пишу сабж на .NET
#define ROFL 0xDDDD


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 96

    TopList