Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.27;
Скачать: CL | DM;

Вниз

Сохранение картинки в файл и последущая ее загрузка:)   Найти похожие ветки 

 
Кирилл ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.05 c
14-1107544558
Delta
2005-02-04 22:15
2005.02.27
Глюки delphi


1-1108200716
jeka
2005-02-12 12:31
2005.02.27
Ошибка при установке компонента


4-1105950846
Yowl
2005-01-17 11:34
2005.02.27
ReadDirectoryChangesW


6-1103189529
vajo
2004-12-16 12:32
2005.02.27
Ip адреса и имена компьютеров


4-1105480613
Mr. Who
2005-01-12 00:56
2005.02.27
Получение названия прцессора и его тактовую частоту