Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Изображение в переменой


Автор: korob2001 21.8.2005, 20:45
Привет!!!
На форме расположен элемент Image, изображение в него подгружается при загрузке формы. Мне нужно каким-то образом прочесть его из Image, ну ещё и PictureBox подойдёт, затем сохранить его в переменную или массив, для дальнейшей обработки.
Подскажите возможно ли это и если да, то как?

Автор: Akina 21.8.2005, 22:46
Откуда подгружается изображение? из файла? из ресурса?

Автор: korob2001 22.8.2005, 04:18
Подгружается из файла, а затем сохранить его нужно в ресурс. Но так как в ресурс нельзя добавить информацию программно, то этот ресурс я хочу создать вручную.

Другими словами: есть фотоальбом в котором несколько фотографий. На данный момент они хранятся в ресурсе. Всё замечательно работает, но мне нужно сделать, что бы можно было добавить новое изображение в альбом, т.е. в данный ресурс. Юзер жмёт кнопку "Добавить", открывается окно выбора файла .jpg, .bmp, .gif и затем этот файл полностью копируется в этот, самописный, ресурс.

Автор: Akina 22.8.2005, 09:13
Цитата(korob2001 @ 22.8.2005, 05:18)
сохранить его нужно в ресурс

Щазз! кто это тебе даст формат ресурса? в API нету функций работы с ним иначе как чтение...

И потом - дался тебе этот ресурс... делай либу изображений в любом из существующих форматов (а еще лучше - создай свой).

Автор: korob2001 22.8.2005, 09:26
Akina smile Так я же и говорю о своём ресурсе, точнее об его эмуляции. Ты похоже даже не дочитал до второго абзаца. smile

Автор: Akina 22.8.2005, 12:16
korob2001
свой ресурс и ресурс своего формата - почувствуйте разницу... выражайтесь яснее.

а если делаешь свой - то делай, оптимизируя под свою задачу... или у тебя именно тут затык - нет идеи как?

Автор: bom 22.8.2005, 15:24
Цитата
ресурс своего формата

Зачем эти лишние телодвижения? Почему бы не задействовать БД, Access например, кроме самих изображений можно будет хранить/добавлять/изменять/удалять и любую инфу к каждому снимку, напр. комментарии, дату, место и др.

Цитата(Akina @ 22.8.2005, 09:13)
...формат ресурса? в API нету функций работы с ним иначе как чтение

А как же BeginUpdateResource, UpdateResource, EndUpdateResource?

Автор: Akina 22.8.2005, 15:44
Цитата(bom @ 22.8.2005, 16:24)
А как же BeginUpdateResource, UpdateResource, EndUpdateResource?

а очень просто:

Цитата(MSDN)
An application must be able to obtain write access to this file; it cannot be currently executing.


Так что в ДРУГОМ файле - запросто... в самом себе - фигушки.

Автор: bom 22.8.2005, 16:28
Цитата(Akina @ 22.8.2005, 15:44)
в ДРУГОМ файле - запросто... в самом себе - фигушки.

Согласен smile В самого себя никто и не собирался smile


Автор: korob2001 22.8.2005, 18:47
Цитата

Согласен  В самого себя никто и не собирался

Вообще-то я собирался. smile
Собственно в том весь и прикол, что файл должен быть всего один, максимум два. Мне пока только приходит на ум создавать бинарник и записывать в него изображения, после всего этого открывать файл произвольного доступа и записывать в него позицию изображения в бинарнике, размер изображения, дата, название изображения и коментарии. Но это пока тольоко теоретически, т.е. ещё не реализовал этого.
Цитата

Зачем эти лишние телодвижения? Почему бы не задействовать БД, Access например, кроме самих изображений можно будет хранить/добавлять/изменять/удалять и любую инфу к каждому снимку, напр. комментарии, дату, место и др

А если не установлен Access на компе товарища, который будет устанавливать эту программу?

Автор: cardinal 22.8.2005, 20:10
Цитата(korob2001 @ 22.8.2005, 16:47)
Вообще-то я собирался.

Да не, это все ерунда. ИМХО это лишний геморрой. Создай программку, а к ней файл - альбом. Придумай свой формат этого альбома и сделай сразу функции GetPic и PutPic, например, для работы с ним.
Цитата(korob2001 @ 22.8.2005, 16:47)
Собственно в том весь и прикол, что файл должен быть всего один, максимум два.

Вот и будет максимум два. smile
Цитата(korob2001 @ 22.8.2005, 16:47)
после всего этого открывать файл произвольного доступа и записывать в него позицию изображения в бинарнике, размер изображения, дата, название изображения и коментарии. Но это пока тольоко теоретически, т.е. ещё не реализовал этого.

Это нафиг не надо. Пишешь все это перед файлом в альбом.
Цитата(bom @ 22.8.2005, 13:24)
Почему бы не задействовать БД, Access например, кроме самих изображений можно будет хранить/добавлять/изменять/удалять и любую инфу к каждому снимку, напр. комментарии, дату, место и др.

Во-первых
Цитата(korob2001 @ 22.8.2005, 16:47)
А если не установлен Access на компе товарища, который будет устанавливать эту программу?

а во-вторых к каждому снимку и так можно добавить любую инфу (см. выше)
Цитата(korob2001 @ 22.8.2005, 16:47)
и записывать в него позицию изображения в бинарнике

Просто придумай что будет началом картинки и что концом (извините за выражение smile). То есть например структуры файла-альбома могут выглядеть так:
<S>, инфа о картинке, формат картинки, bitmap, <E> (где <S> начало и <E> конец)
<S>, инфа о картинке, формат картинки, bitmap, <E> (где <S> начало и <E> конец)
<S>, инфа о картинке, формат картинки, bitmap, <E> (где <S> начало и <E> конец)
...

или
таблица с стартовыми координатами картинок, картинка, картинка, картинка...

Автор: korob2001 22.8.2005, 20:56
Спасибо. Сейчас чего нить попробую.
Но меня честно говоря больше всего, сейчас, волнует: как потом получить изображение из такой структуры? Т.е. если я правильно понимаю, мне нужно будет читать его с заданной позиции, до длины изображения + информации об изображении, в массив типа Byte, с этим проблем думаю не возникнет. А вот как потом этот массив запхнуть в Image или PictureBox? Не извлекать же его оттуда в отдельный файл перед каждым показом?

Автор: Akina 22.8.2005, 21:41
Для работы с БД Аксесса сам Аксесс не нужен - достаточно наличия Jet, а он есть. Ну можем MDAC придется обновить...

Цитата(korob2001 @ 22.8.2005, 21:56)
Не извлекать же его оттуда в отдельный файл перед каждым показом?

а почему, собственно?
Впрочем, можно заранее заготовить пустую болванку и напрямую копировать туда байты через CopyMemory...

Автор: korob2001 22.8.2005, 22:00
Цитата

Впрочем, можно заранее заготовить пустую болванку и напрямую копировать туда байты через CopyMemory...

Akina - если можно, подробнее. Что за болванка и что за CopyMemory? Ты имеешь ввиду буфер обмена? smile

Автор: Akina 22.8.2005, 22:05
Цитата(korob2001 @ 22.8.2005, 23:00)
Что за болванка

Пустой (или любой размером не менее как в пикселях, так и в байтах) граф. файл в Image или PictureBox. Впрочем, не убежден, что не потребуется точное совпадение.

Цитата(korob2001 @ 22.8.2005, 23:00)
что за CopyMemory

WinAPI

Автор: korob2001 22.8.2005, 22:11
Спасибо.
Сейчас почитаю про CopyMemory, мне как раз недавно привезли, чудную, книгу по API: "Win32 API и Visual Basic" - Дан Эпплман

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)