Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизСохранение картинки в файл и последущая ее загрузка:) Найти похожие ветки
← →
Кирилл © (2005-02-13 16:09) [0]Кирилл © (13.02.05 15:55)
Уважаемые мастера! Помогите пожалуйста разобраться! Хочу чтобы картинка грузилась из файла, который не может быть просмотрен пользователем.
Вот код проги, создающей файл:
procedure TForm1.Button1Click(Sender: TObject);
var
bmp: TBitMap;
f: file of TBitMap;
begin
OpenDialog1.Execute;
SaveDialog1.Execute;
bmp:=TBitMap.Create;
bmp.LoadFromFile(OpenDialog1.FileName);
AssignFile(f, SaveDialog1.FileName+".tex");
Rewrite(f);
Write(f, bmp);
closefile(f);
end;
А вот код проги, читающей файл:
procedure TForm1.FormCreate(Sender: TObject);
var
bmp: TBitMap;
f: File of TBitMap;
begin
bmp:=TBitMap.Create;
AssignFile(f, "C:\New\tex1.tex");
Reset(f);
Read(f, BMP);
CloseFile(f);
Image1.Canvas.Draw(0,0,BMP);
end;
Выделенная строка вызывает динамическую ошибку. Никак не пойму, в чём тут дело?
--------------------------------------------------------------------------------
Kerk © (13.02.05 15:59) [1]
А хочешь угадаю сколько байт файл занимает? Четыре? :)
--------------------------------------------------------------------------------
begin...end © (13.02.05 16:00) [2]
> Кирилл © (13.02.05 15:55)
Проблема, по-видимому, в том, что в файле находится не изображение, как хотелось бы Вам, а указатель на экземпляр TBitmap. Посмотрите на размер используемого Вами файла - вероятно, его размер составляет 4 байта. Вряд ли изображение в формате BMP может занимать такой маленький объём, не правда ли? :-)
Используйте методы TBitmap.SaveToFile и TBitmap.LoadFromFile.
← →
Кирилл © (2005-02-13 16:10) [1]
> TBitmap.SaveToFile и TBitmap.LoadFromFile.
Но тогда получится файл .bmp !
← →
olookin © (2005-02-13 16:10) [2]begin...end © (13.02.05 16:00) [2]
>>Используйте методы TBitmap.SaveToFile и TBitmap.LoadFromFile.
Если этим ограничиться, тогда как раз и можно будет просмотреть файл.
← →
begin...end © (2005-02-13 16:18) [3]> Кирилл © (13.02.05 16:10) [1]
> Но тогда получится файл .bmp !
А Вам какой нужен?
← →
Kerk © (2005-02-13 16:20) [4]а у TBitmap SaveToStream / LoadFromStream есть? не помню.. тогда сохранять в поток, шифровать, а потом на диск.
← →
begin...end © (2005-02-13 16:22) [5]> Kerk © (13.02.05 16:20) [4]
> а у TBitmap SaveToStream / LoadFromStream есть?
Есть.
← →
Кирилл © (2005-02-13 16:22) [6]
> begin...end © (13.02.05 16:18) [3]
А мне нужен файл, например с расширением *.tex или просто "file", который содержит bitmap, но который нельзя открыть с помощью например Paint"а
← →
Кирилл © (2005-02-13 16:24) [7]
> сохранять в поток, шифровать, а потом на диск.
А код можно?
← →
begin...end © (2005-02-13 16:24) [8]> Кирилл © (13.02.05 16:22) [6]
Смотря от каких пользователей нужна защита. Для некоторых достаточно поменять расширение у файла.
← →
Кирилл © (2005-02-13 16:27) [9]
> Смотря от каких пользователей нужна защита. Для некоторых
> достаточно поменять расширение у файла.
Знаю, но к сожалению мне этого не достаточно
← →
olookin © (2005-02-13 16:30) [10]procedure TForm1.Button1Click(Sender: TObject);
var b: TBitmap;
s: string;
f: TFileStream;
c: Char;
begin
b:=TBitmap.Create;
b.Width:=10;
b.Height:=10;
b.Canvas.Brush.Color:=clRed;
b.Canvas.FillRect(Rect(0,0,10,10));
s:="C:\newfile.bmp";
b.SaveToFile(s);
f:=TFileStream.Create(s,fmOpenReadWrite);
f.Write(c,SizeOf(integer));
f.Free;
RenameFile(s,"C:\newfile.tex");
end;
← →
begin...end © (2005-02-13 16:38) [11]> olookin © (13.02.05 16:30) [10]
> c: Char;
> ...
> f.Write(c,SizeOf(integer));
?
И, плюс к этому, ведь содержимое файла будет испорчено?
← →
Кирилл © (2005-02-13 16:41) [12]
> olookin © (13.02.05 16:30) [10]
А как грузить?
← →
olookin © (2005-02-13 16:47) [13][11] begin...end © (13.02.05 16:38)
Да уж... Вообще этот мой код работать не будет.
Вот этот будет:
procedure TForm1.Button1Click(Sender: TObject);
var b: TBitmap;
s: string;
f: TFileStream;
c: Char;
begin
b:=TBitmap.Create;
b.Width:=10;
b.Height:=10;
b.Canvas.Brush.Color:=clRed;
b.Canvas.FillRect(Rect(0,0,10,10));
s:="C:\newfile.bmp";
b.SaveToFile(s);
f:=TFileStream.Create(s,fmOpenReadWrite);
f.Position:=0;
c:="A"; //все bmp файлы начинаются с символа B, портим его на А
f.Write(c,SizeOf(Char));
f.Free;
//попробуем открыть файл с помощью Paint - получаем шиш
end;
procedure TForm1.Button2Click(Sender: TObject);
var b: TBitmap;
s: string;
f: TFileStream;
c: Char;
begin
b:=TBitmap.Create;
s:="C:\newfile.bmp";
f:=TFileStream.Create(s,fmOpenReadWrite);
f.Position:=0;
c:="B"; //восстанавливаем символ
f.Write(c,SizeOf(Char));
f.Free;
b.LoadFromFile(s);
//попробуем открыть файл с помощью Paint - получаем что можно
end;
← →
Кирилл © (2005-02-13 17:01) [14]
> olookin © (13.02.05 16:47) [13]
Всё работает. Большое спасибо!
← →
Юрий Зотов © (2005-02-13 17:02) [15]Используем модуль Zlib и храним на диске файл в сжатом виде. Если нужен дополнительный уровень защиты, то еще и шифруем поток.
← →
PZ (2005-02-13 17:33) [16]Все очень просто. По крайней мере, не очень опытный мастер не догадается:
procedure TForm1.Button1Click(Sender: TObject);
Var
F1, F2 : File of byte;
B : Byte;
begin
If OpenDialog1.Execute then
begin
AssignFile(F1, OpenDialog1.FileName);
AssignFile(F2, "Proba.txt");
Reset(F1);
ReWrite(F2);
Read(F1, B);
Read(F1, B);
While not EOF(F1) do
begin
Application.ProcessMessages;
Read(F1, B);
Write(F2, B);
end;
CloseFile(F2);
CloseFile(F1);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
F1, F2 : File of byte;
B : Byte;
begin
If OpenDialog1.Execute then
begin
AssignFile(F1, "Proba.txt");
AssignFile(F2, "Proba.bmp");
Reset(F1);
ReWrite(F2);
B := $42;
Write(F2, B);
B := $4D;
Write(F2, B);
While not EOF(F1) do
begin
Application.ProcessMessages;
Read(F1, B);
Write(F2, B);
end;
CloseFile(F2);
CloseFile(F1);
end;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.114 c