Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, сколько байт занимает рисунок? который в PictureBox лежит 
V
    Опции темы
Тутанхамец
Дата 19.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Хочу скопировать рисунок из PictureBox в массив байтов. Насколько я понимаю, свойство Image - это указатель... на что? на байты рисунка? Тогда скопировать их можно с помощью CopyMemory. Но как узнать, сколько байт он занимает?

Или хэндл битмапа - это указатель на какую-нибудь структуру?
PM MAIL   Вверх
cardinal
Дата 19.2.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Про структуру bmp читай тут:
http://forum.vingrad.ru/index.php?showtopi...st&p=645775


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Тутанхамец
Дата 21.2.2006, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Спасибо, со структурой битмапа вроде понятно. Когда он лежит в файле.

А вот если он уже прочитан в picturebox? Что я найду в памяти, юзая Picture1.image как указатель?

Весь файл с BitmapFileHeader, BitmapInfoHeader и т.п.? Попытался через CоpyMemory - вроде непохоже ни на что.

В общем, как выглядит битмап, когда он лежит в оперативной памяти? И является ли .image тем же самым, что и HBITMAP.


PM MAIL   Вверх
Exception
Дата 21.2.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



А зачем тебе его копировать в массив байтов? Давай найдем другой путь решения задачи smile
PM   Вверх
cardinal
Дата 21.2.2006, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Вот и я думаю. Если он лежит в PictureBox, то значит он и на диске где-то лежит. Ну а если так, то посмотри тут пример...
VB-VB-002142
p.s. так и не дописал статью кстати... smile


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Exception
Дата 21.2.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



Кстати, в каком-то из свойств хранится hBitmap картинки. Через него и можно ее потом использовать.
PM   Вверх
Тутанхамец
Дата 21.2.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Цитата

Кстати, в каком-то из свойств хранится hBitmap картинки. Через него и можно ее потом использовать


Кажется, это свойство Image.

Цитата

А зачем тебе его копировать в массив байтов? Давай найдем другой путь решения задачи


А надо-то (кроме ослиного упрямства smile ) вот зачем. Мне надо складывать несколько картинок в один файл, а потом в процессе работы программы загружать в Picture (или рисовать прямо на форме) то одну, то другую.

Складывать файлы картинок в один файл (назовем его "общий") я могу. Но вот когда надо загружать их в Picture возникают проблемы. Можно, конечно, выдирать картинку из "общего" файла в память, скидывать во временный файл (с одной-единственнйо кратинкой), читать этот временный файл в PictureBox и стирать его с диска. Но, во первых, это некрасиво. Во вторых, это медленно. Я хочу считать все картинки из "общего" файла в оперативную память и прямо из памяти грузить их в PictureBox. Но как получить HBITMAP чего-то, что лежит в оперативке?

В общем вопрос такой - как обойтись без посредничества временного файла?

Если бы знать, сколько байт занимает картинка, когда она в PictureBox, то я бы просто скопировал эти байты, а потом запихнул бы их обратно.
PM MAIL   Вверх
SCINER2
Дата 28.2.2006, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 28.2.2006

Репутация: нет
Всего: нет



Что-то форум не пускает меня под старым ником SCINER =(
Вот:
Код
Option Explicit

Private Const OBJ_BITMAP = 7
Private Type BITMAP '14 bytes
  bmType As Long
  bmWidth As Long
  bmHeight As Long
  bmWidthBytes As Long
  bmPlanes As Integer
  bmBitsPixel As Integer
  bmBits As Long
End Type
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) As Long

Private Sub Form_Load()
  Dim Bmp As BITMAP
  Call GetObject(Picture1.Picture.Handle, Len(Bmp), Bmp)
  MsgBox Bmp.bmWidth & "x" & Bmp.bmHeight & "x" & Bmp.bmBitsPixel & vbCrLf & _
         "размер " & Bmp.bmWidth * Bmp.bmHeight * (Bmp.bmBitsPixel \ 8) & " байт"
End Sub

PM MAIL   Вверх
Тутанхамец
Дата 28.2.2006, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 10.10.2005
Где: в пирамидЕ!

Репутация: 4
Всего: 6



Да! smile Кажется, это то, что надо! Большое спасибо!


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0819 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.