Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
14-1107704718
Aldor_
2005-02-06 18:45
2005.02.27
Измерить объективное расстояние между пикселами на экране


11-1092376972
DmiSb
2004-08-13 10:02
2005.02.27
KOL & Excel


14-1107704183
Ivolg
2005-02-06 18:36
2005.02.27
Java Virtual Machine


3-1106637936
igor_w
2005-01-25 10:25
2005.02.27
Как реализовать PageControl с БД


1-1108069277
Porecla
2005-02-11 00:01
2005.02.27
Получить параметры из реестра





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский