Вопрос: Сохранение изображения в переменной | Добавлено: 06.10.07 19:05 |
Автор вопроса: ![]() |
Есть картинка в PictureBox, необходимо сохранить ее в переменную, не обращяясь к диску(могут перехватить, а программа у меня для хранения паролей), также интересует - как потом загрузить ее обратно? При этом ес-но нельзя использовать LoadPicture и SavePicture. Еще одно: переменная должна быть текстовая, что-бы можно было зашифровать как текст и сохранить в файл. Заранее спасибо! |
Ответы | Всего ответов: 17 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 419668582 Вопросов: 23 Ответов: 147 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 06.10.07 19:15 |
Я знаю два способа:
1. Буфер обмена 2. Unicode. В нем все сиволы сохраняются Peremenia = StrConv([тест из рисунка], vbUnicode) |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 427682013 Вопросов: 14 Ответов: 464 |
Профиль | Цитата | #2 | Добавлено: 06.10.07 19:32 |
Peremenia = StrConv([тест из рисунка], vbUnicode) Это ещё что??
Можно перебрать рисунок попиксельно и загнать данные в массив! ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 71 Ответов: 246 |
Профиль | Цитата | #4 | Добавлено: 07.10.07 15:51 |
что такое IPicture? Не встречал такого за несколько лет практики(у меня VB6). |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 08.10.07 01:30 |
IPicture это интерфейс реализуемый в StdPicture, если интересно ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 08.10.07 01:54 |
жесть вопрос![]() |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 08.10.07 12:49 |
rascal ![]() нене, это не тема ![]() vb6 COM ориентирован ![]() GetDIBBits только bmp-шки и получать, а так можно и жпег и гиф и бмп, и wmf ![]() |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 08.10.07 17:49 |
![]() ![]() |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 08.10.07 18:26 |
биты, битмап - сходство ![]() вобщем не суть важно ![]() |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 71 Ответов: 246 |
Профиль | Цитата | #10 | Добавлено: 09.10.07 16:12 |
У кого-нить есть пример использования GetDIBBits и SetDIBBits? Что-то я не очень представляю... |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 71 Ответов: 246 |
Профиль | Цитата | #12 | Добавлено: 09.10.07 16:55 |
Pa$cal, непонял, при чем тут GetDIBBits? Если можно, пожалуйста, пример на VB. Я в Дельфи не очень ориентируюсь. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 09.10.07 18:31 |
1) почитай про HDC, HBITMAP. Это основы gdi.
2) Это с++ ![]() На вб все сводится к вызову тех же функций. Создание dc & hbitmap, сохранение туда изображения, получение битов пикселей. главное проблемко - img_bmp. поля должны быть заполнены. там их много, но в мсдн есть функа CreateBitmapInfoStruct, которая все это делает. Далее вызываем GetDIBBits и получаем в буфере пикселы. От языка зависит наверное только оформление передачи параметров по ссылке. На вб у меня такого нету, но попробуй гуглить CreateBitmapInfoStruct + vb ![]() |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 8068014 Вопросов: 18 Ответов: 817 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 09.10.07 18:31 |
зы, ещё раз ниг исказишь - будет личный игнор. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 71 Ответов: 246 |
Профиль | Цитата | #15 | Добавлено: 09.10.07 19:18 |
Ra$cal , извини
|
|