Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать Bitmap через проецируемые файлы, межпрограммное взаимодействие 
V
    Опции темы
remax
  Дата 17.11.2008, 02:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Что-то уперся  smile  в простом казалось бы вопросе: передача данных между программами. 
Задача - есть картинка в одной программе ее надо передать в другую, причем, использовать именно FileMapping.  (Clipboard и обычные файлы не подходят!!!) 

Реализация (сама суть)
Код

var
  hFileMapObj:THandle;  
  lpBaseAddress:^TBitmap;
.....
// Создаем файл, подготавливаем область копирования
hFileMapObj := CreateFileMapping(MAXDWORD,Nil,PAGE_READWRITE,0,size,PAnsiChar('File1'));
lpBaseAddress := MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,0,0,size);
lpBaseAddress^:=TBitmap.Create;

// Копируем картинку
(lpBaseAddress^).Assign(image1.Picture.Bitmap)
....


вторая программа
Код

var
  hFileMapObj:THandle;  
  lpBaseAddress:^TBitmap;
.....
// Открываем файл, подготавливаем область копирования
hFileMapObj := OpenFileMapping(FILE_MAP_READ, FALSE, PAnsiChar('File1'));
lpBaseAddress := MapViewOfFile(hFileMapObj,FILE_MAP_WRITE,0,0,size);

// получаем картинку
image1.Picture.BitMap.Assign(lpBaseAddress^);
//!!!!!!!!!!!!!!!!!! Здесь ошибка времени  выполнения!!!!!!!
....


Как правильно передать картинку посредством FileMapping?


Это сообщение отредактировал(а) remax - 17.11.2008, 02:21


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
remax
Дата 18.11.2008, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Нет вариантов?


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
dumb
Дата 18.11.2008, 04:13 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


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

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



ты как-то странно "картинку передаешь" - в мэппинг засовываешь указатель на TBitmap. с таким же успехом можно было этот указатель в файл записать, потом из другой программы его прочитать и пытаться с ним работать... smile

простой путь, но с оверхедом на лишнее копирование(схематично):
Код

mapview:^byte
memstream=TMemoryStream.Create
bitmap.SaveToStream(memstream)
CreateFileMapping
mapview=MapViewOfFile(...,memstream.size+sizeof(dword)) // или просто фиксированно большой выделить
pdword(mapview)^=memstream.size // в начало мэппинга пишем размер
memstream.position=0
MoveMemory(mapview+sizeof(dword), memstream.memory, memstream.size) // пишем саму картинку
//вынос тела по аналогии


посложнее - создать потомка TCustomMemoryStream в котором буфером назначать мэппинг.
PM MAIL   Вверх
remax
  Дата 18.11.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент
**


Профиль
Группа: Участник Клуба
Сообщений: 686
Регистрация: 7.4.2002
Где: Украина, Харьков

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



Да, спасибо - предложенный вариант полностью работоспособный  smile 


--------------------
Как бы ты не старался быть хорошим и правильным человеком с принципами и уважительным отношением к другим, всегда найдется кто-то, кто бросит в тебя какашку
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


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

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


 




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


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

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