3042 писал(а):
Я и сам думал, как Stream преобразовать в картинку без файла - и ничего не придумал
Img_GDIFileProcessor может это сделать?
Да, можно, если картинка Stream является картинкой доступного формата (bmp, gif, ico, wmf, emf, tif, png). Те можно загрузить Stream PNG, на выходе получишь Битмап.
--- Добавлено в 2018-01-23 18:17:30
Вот схема, которая криптует сразу поток картинки ее родного формата, а графический процессор потом читает декриптованную картинку
Схема
Add(Img_GDIFileProcessor,1979947,364,140)
{
Method=1
@IsLib=True
link(onLoad,15816066:doLoad,[])
}
Add(MainForm,218580,126,84)
{
Width=377
Height=235
Caption="Crypt-DeCrypt image"
Position=1
}
Add(Button,9628864,126,133)
{
Left=10
Top=140
Width=40
Caption="Open"
link(onClick,6607378:doExecute,[])
}
Add(Image,15816066,427,140)
{
Left=10
Top=10
Width=160
Height=120
Point(ImageWidth)
Point(ImageHeight)
}
Add(Image,12515042,630,399)
{
Left=185
Top=10
Width=160
Height=120
}
Add(Button,1194282,126,259)
{
Left=55
Top=140
Width=95
Caption="Encrypt and Save"
link(onClick,12702545:doExecute,[])
}
Add(Edit,75778,371,203)
{
Left=10
Top=165
Width=85
Text="123456"
DataType=2
}
Add(Button,6051066,126,399)
{
Left=210
Top=140
Width=105
Caption="Open Encrypted"
link(onClick,14569606:doExecute,[])
}
Add(Edit,6164446,392,343)
{
Left=225
Top=165
Width=85
Text="123456"
DataType=2
}
Add(SDialog,12702545,196,259)
{
Filter="Зашифрованное изображение IMG (*.img.enc)|*.img.enc"
Title="Сохранение"
FileName=""
link(onExecute,12925532:doValue,[])
}
Add(ODialog,14569606,175,399)
{
Filter="Зашифрованное изображение IMG (*.img.enc)|*.img.enc"
Title="Открытие изображения"
FileName=""
link(onExecute,7024419:doOpen,[])
}
Add(FileStream,11939445,588,245)
{
Mode=1
AutoCopy=0
Point(doCopyFromStream)
link(FileName,12925532:Value,[(594,194)(356,194)(356,299)(251,299)])
}
Add(Message,174773,588,294)
{
Message="Зашифрованый файл сохранен!"
Caption="Информация"
Icon=4
}
Add(Message,1437305,532,315)
{
Caption="Ошибка шифрования/дешифрования"
Icon=1
}
Add(FileStream,7024419,231,399)
{
link(onLoad,16393140:doEvent1,[])
}
Add(Hub,16393140,287,399)
{
link(onEvent1,4936526:doConvert,[])
link(onEvent2,7024419:doClose,[(312,412)(312,440)(221,440)(221,412)])
}
Add(Message,6008702,588,406)
{
Message="Картинка загружена."
Caption="Информация"
Icon=4
}
Add(Hub,10861664,560,399)
{
link(onEvent1,12515042:doLoad,[])
link(onEvent2,6008702:doMessage,[])
}
Add(DeCrypt,13176887,385,399)
{
Mode=7
HashMode=0
Point(onError)
link(onDeCrypt,620174:doConvert,[])
link(Key,6164446:Text,[])
link(onError,7933554:doWork3,[(438,412)])
}
Add(EnCrypt,3985395,364,259)
{
Mode=7
HashMode=0
Point(onError)
link(onEnCrypt,5358436:doConvert,[])
link(Key,75778:Text,[])
link(onError,7933554:doWork1,[(438,272)])
}
Add(StreamConvertor,2036368,301,259)
{
Mode=6
Point(Data)
link(onResult,3985395:doEnCrypt,[])
link(Data,5142610:Stream,[])
}
Add(StreamConvertor,5358436,448,259)
{
Mode=7
Point(Data)
link(onResult,5934038:doEvent1,[])
}
Add(Memory,12925532,245,259)
{
link(onData,2036368:doConvert,[])
}
Add(Hub,5934038,539,259)
{
link(onEvent1,11939445:doCopyFromStream,[])
link(onEvent2,174773:doMessage,[(578,272)(578,300)])
}
Add(StreamConvertor,4936526,329,399)
{
Mode=6
Point(Data)
link(onResult,13176887:doDeCrypt,[])
}
Add(StreamConvertor,620174,455,399)
{
Mode=7
Point(Data)
link(onResult,12559200:doLoadFrom,[])
}
Add(StrList,14371271,476,308)
{
Strings=#8:NO_ERROR|23:ERROR_INVALID_PARAMETER|19:ERROR_INCORRECT_KEY|21:ERROR_ACQUIRE_CONTEXT|20:ERROR_GENERATION_KEY|24:ERROR_GENERATION_KEYPAIR|18:ERROR_GET_USER_KEY|16:ERROR_DERIVE_KEY|13:ERROR_ENCRYPT|13:ERROR_DECRYPT|17:ERROR_CREATE_HASH|15:ERROR_HASH_DATA|20:ERROR_GET_HASH_PARAM|17:ERROR_SIGNED_HASH|20:ERROR_EXPORT_KEYPAIR|22:ERROR_EXPORT_PUBLICKEY|23:ERROR_EXPORT_SESSIONKEY|24:ERROR_EXPORT_EXCHANGEKEY|20:ERROR_IMPORT_KEYPAIR|22:ERROR_IMPORT_PUBLICKEY|23:ERROR_IMPORT_SESSIONKEY|24:ERROR_IMPORT_EXCHANGEKEY|26:ERROR_WRONG_CONTAINER_NAME|22:ERROR_CREATE_CONTAINER|22:ERROR_DELETE_CONTAINER|26:ERROR_CONTAINER_NOT_EXISTS|30:ERROR_CONTAINER_ALREADY_EXISTS|19:ERROR_NO_CONTAINERS|
Point(doGetString)
Point(onGetString)
link(onGetString,1437305:doMessage,[])
}
Add(HubEx,7933554,434,350)
{
link(onEvent,14371271:doGetString,[])
}
Add(FileStream,5142610,301,140)
{
link(onLoad,1979947:doLoadFrom,[])
}
Add(ODialog,6607378,203,133)
{
Filter="All Image Files|*.bmp;*.gif;*.ico;*wmf;*.emf;*.tif;*.png;*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|JPG (*.jpg, *.jpeg)|*.jpg;*.jpeg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|PNG (*.png)|*.png|ICO (*.ico)|*.ico|EMF (*.emf)|*.emf|WMF (*.wmf)|*.wmf|All files (*.*)|*.*"
FileName=""
link(onExecute,11007602:doEvent1,[])
}
Add(Hub,11007602,259,133)
{
link(onEvent1,5142610:doClose,[(284,139)(284,153)])
link(onEvent2,5142610:doOpen,[])
}
Add(Img_GDIFileProcessor,12559200,504,399)
{
elink(1979947)
link(onLoad,10861664:doEvent1,[])
}