Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 |

 

  Вопрос: Сохранение изображения в переменной Добавлено: 06.10.07 19:05  

Автор вопроса:  Programmer
Есть картинка в PictureBox, необходимо сохранить ее в переменную, не обращяясь к диску(могут перехватить, а программа у меня для хранения паролей), также интересует - как потом загрузить ее обратно? При этом ес-но нельзя использовать LoadPicture и SavePicture. Еще одно: переменная должна быть текстовая, что-бы можно было зашифровать как текст и сохранить в файл. Заранее спасибо!

Ответить

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

Номер ответа: 1
Автор ответа:
 »VladikComper«



ICQ: 419668582 

Вопросов: 23
Ответов: 147
 Web-сайт: vladikcomper.narod.ru
 Профиль | | #1
Добавлено: 06.10.07 19:15
Я знаю два способа:
1. Буфер обмена
2. Unicode. В нем все сиволы сохраняются
Peremenia = StrConv([тест из рисунка], vbUnicode)

Ответить

Номер ответа: 2
Автор ответа:
 Mr.Smile



ICQ: 427682013 

Вопросов: 14
Ответов: 464
 Профиль | | #2 Добавлено: 06.10.07 19:32
Peremenia = StrConv([тест из рисунка], vbUnicode)
Это ещё что??

Можно перебрать рисунок попиксельно и загнать данные в массив! :)

Ответить

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #3
Добавлено: 06.10.07 23:47
Сохранение:
1. Создать IStream
2. IPicture::SaveAsFile

Загрузка
1. Создать IStream
2. OleLoadPicture

Пример загрузки есть, сохранение по аналогии написать самому труда, думаю, не составит.

'--------------------------------------------------------------------------------
' Проект     :  OfflineClient
' Процедура  :  PictureFromMemory
' Описание   :  Получение IPicture из массива
' Кем создан :  SNE
' Дата-Время :  15.11.2004-21:45:57
'
' Параметры  :  btData()    - Данные картинки
'--------------------------------------------------------------------------------
Public Function PictureFromMemory(ByRef btData() As Byte) As IPicture
    Dim IID_IPicture(15) As Byte
    Dim pGlobal As Long, pStream As IUnknown

    Const sIID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"

    pGlobal = GlobalAlloc(0&, UBound(btData) + vbNull)
    Call CopyMemory(ByVal pGlobal, btData(0), UBound(btData) + vbNull)

    If CreateStreamOnHGlobal(pGlobal, True, pStream) = 0& Then
        If CLSIDFromString(StrPtr(sIID_IPicture), IID_IPicture(0)) = 0& Then
            Call OleLoadPicture(ByVal ObjPtr(pStream), UBound(btData) + vbNull, False, IID_IPicture(0), PictureFromMemory)
        End If
    End If

    If PictureFromMemory Is Nothing Then _
        Call GlobalFree(pGlobal)

End Function

Ответить

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



Вопросов: 71
Ответов: 246
 Профиль | | #4 Добавлено: 07.10.07 15:51
что такое IPicture? Не встречал такого за несколько лет практики(у меня VB6).

Ответить

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 08.10.07 01:30
IPicture это интерфейс реализуемый в StdPicture, если интересно =)

Ответить

Номер ответа: 6
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #6
Добавлено: 08.10.07 01:54
жесть вопрос=) используй GetDIBBits, получишь массив пикселов. его можно криптонуть и сохранить на диск. далее при загрузке раскриптануть, и SetDIBBits.

Ответить

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



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 08.10.07 12:49
rascal =)
нене, это не тема =)
vb6 COM ориентирован =)
GetDIBBits только bmp-шки и получать, а так можно и жпег и гиф и бмп, и wmf =)

Ответить

Номер ответа: 8
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #8
Добавлено: 08.10.07 17:49
=) рисуем картинку в контекст. и чтаем биты =)

Ответить

Номер ответа: 9
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #9
Добавлено: 08.10.07 18:26
биты, битмап - сходство :)
вобщем не суть важно =)

Ответить

Номер ответа: 10
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #10 Добавлено: 09.10.07 16:12
У кого-нить есть пример использования GetDIBBits и SetDIBBits? Что-то я не очень представляю...

Ответить

Номер ответа: 11
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #11
Добавлено: 09.10.07 16:29
fl.LoadCompressedFile(img_dc, img_bmp, path, width, height);
pixels_data = new BYTE [width * height * 4];
BYTE* compr = new BYTE [width * height * 4];
CreateBitmapInfoStruct(img_bmp);
int retval = GetDIBits(img_dc, img_bmp, 0, (WORD) height, pixels_data, &bmi, DIB_RGB_COLORS);
compressed_size = lzwc.Compress((BYTE*)pixels_data, compr, height * width * 4);

//LoadCompressedFile ( HDC& DC, HBITMAP& BMP, char* strPath, int& width, int& height)
Bitmap*   lBitmap = new Bitmap ((const WCHAR*) wszPath);
Color color(0, 0, 0, 0);

HDC tmp_dc;
HBITMAP tmp_bmp;

DC = CreateCompatibleDC(GetDC(0));
tmp_dc = CreateCompatibleDC(GetDC(0));

width = lBitmap->GetWidth();
height = lBitmap->GetHeight();
BMP = CreateCompatibleBitmap(GetDC(0), lBitmap->GetWidth(), lBitmap->GetHeight());
//BMP тот же, что и img_bmp выше
SelectObject(DC, BMP);
rez = lBitmap->GetHBITMAP(color, &tmp_bmp);
SelectObject(tmp_dc, tmp_bmp);
BitBlt (DC, 0, 0, lBitmap->GetWidth(), lBitmap->GetHeight(), tmp_dc, 0, 0, SRCCOPY);
DeleteObject (tmp_dc);
DeleteObject(tmp_bmp);

CreateBitmapInfoStruct взята из мсдн

Ответить

Номер ответа: 12
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #12 Добавлено: 09.10.07 16:55
Pa$cal, непонял, при чем тут GetDIBBits? Если можно, пожалуйста, пример на VB. Я в Дельфи не очень ориентируюсь.

Ответить

Номер ответа: 13
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #13
Добавлено: 09.10.07 18:31
1) почитай про HDC, HBITMAP. Это основы gdi.
2) Это с++ =)

На вб все сводится к вызову тех же функций. Создание dc & hbitmap, сохранение туда изображения, получение битов пикселей. главное проблемко - img_bmp. поля должны быть заполнены. там их много, но в мсдн есть функа CreateBitmapInfoStruct, которая все это делает. Далее вызываем GetDIBBits и получаем в буфере пикселы. От языка зависит наверное только оформление передачи параметров по ссылке.
На вб у меня такого нету, но попробуй гуглить CreateBitmapInfoStruct + vb =)

Ответить

Номер ответа: 14
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #14
Добавлено: 09.10.07 18:31
зы, ещё раз ниг исказишь - будет личный игнор.

Ответить

Номер ответа: 15
Автор ответа:
 Programmer



Вопросов: 71
Ответов: 246
 Профиль | | #15 Добавлено: 09.10.07 19:18
Ra$cal
, извини

Ответить

Страница: 1 | 2 |

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



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