Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2009, 19:55   #21
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

Если Jpg то Image1.Picture.Bitmap поменяй на Image1.Picture.Graphic.

Ну как, как:

1. Создаем fs : TFileStream;
2. Создаем ms: TMemoryStream;
3. Открываем файлСтримом файл с картинками на чтение (во втором параметре конструктора файлстрима пишы fmOpenRead
4. Читаем размер картинки в переменную int64
5. Потом читаем в ms из fs ранее полученое количество байт
6. Image1.Picture.Graphic.LoadFromStre am(ms);
7.Переходим к шагу 4.

Всё. Думаю переведеш на язык делфи????
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 20:32   #22
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

procedure TForm2.FormShow(Sender: TObject);
var
fs:TFileStream;
ms: TMemoryStream;
MyJpeg: TJpegImage;
i:integer;
imgSize: int64;
sizePos: int64;
begin
MyJpeg:=TJpegImage.Create;
ms:=TMemoryStream.Create;
fs:=TFileStream.Create('C:\location s.dbls',fmOpenRead); imgSize:=0;
sizePos:=0; for I:=1 to 9 do
begin
ms.clear;
imgsize:=fs.Read(imgSize,SizeOf(img Size));
ms.CopyFrom(fs,imgSize);
myjpeg.LoadFromStream(ms); \
image1.canvas.Draw(1,1,myjpeg); / если вместо этих строк написать Image1.Picture.Graphic.LoadFromStre am(ms); то возникает Access Violation
end;
ms.Free;
end;

Возникает ошибка JPEG #42..

Последний раз редактировалось The Best; 03.08.2009 в 20:36.
The Best вне форума Ответить с цитированием
Старый 03.08.2009, 20:45   #23
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

А в файле имеется 9 записей. Возможно там только 8 или меньше картинок. Приведи плиз твой код записи в файл.
Или сделай другой цыкл:
while fs.position < fs.size do
begin
...
end;
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 03.08.2009, 21:40   #24
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Код:
procedure TForm1.SpeedButton4Click(Sender: TObject);
 var
  fs :tfilestream;
  i :integer;
  imgsize:int64;
  sizepos:int64;
  img:timage;
begin
fs := tfilestream.Create('e:\myfile.mmp', fmcreate);

 imgsize := 0;
 sizepos := 0;

 for i := 1 to 3 do
 begin
  img := timage(form1.FindComponent('image' + inttostr(i)));
  sizepos := fs.Position;
  fs.Write(imgsize, sizeof(imgsize));

  image1.Picture.Bitmap.SaveTostream(fs);
  image2.Picture.Bitmap.SaveToStream(fs);
  image3.Picture.Bitmap.SaveToStream(fs);
  imgsize := fs.Position - sizepos;
  fs.Seek(sizepos, sofrombeginning);
  fs.Write(imgsize,sizeof(imgsize));
  fs.Seek(0,sofromend);
  end;
fs.Free;

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
fs:TFileStream;
ms: TMemoryStream;
img: TImage;
i:integer;
imgSize: int64;
sizePos: int64;
begin
ms:=TMemoryStream.Create;
fs:=TFileStream.Create('e:\myfile.mmp',fmOpenRead);
sizePos:=0;

for I:=1 to 3 do
begin
ms.clear;
imgsize:=fs.Read(imgSize,SizeOf(imgSize));
ms.CopyFrom(fs,imgSize);
img.Picture.Bitmap.LoadFromStream(ms);
image1.Canvas.Draw(0,0,img.Picture.bitmap);
end;
ms.Free;

end;
так не работает

Последний раз редактировалось blackstersl; 03.08.2009 в 21:55.
blackstersl вне форума Ответить с цитированием
Старый 03.08.2009, 21:46   #25
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

А создаю я файл вот так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
 MyJpeg: TJpegImage;
 fs : TFileStream;
 i:integer;
 imgSize: int64;
 sizePos: int64;
begin
 MyJpeg:=TJpegImage.Create;
 fs:=TFileStream.Create('C:\locations.dbls',fmCreate); //Создаем файловый поток и
 //сразу создаем файл с нужным разширением.
 imgSize:=0;
 sizePos:=0;
 //Цыкл По картинкам
 for i := 1 to 9{оличество картинок}do
  begin
   case I of
    1: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вправо-вниз.jpg');
    2: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вниз-влево-вправо.jpg');
    3: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Влево-вниз.jpg');
    4: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вверх-вниз-вправо.jpg');
    5: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Все направления.jpg');
    6: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вверх-вниз-влево.jpg');
    7: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вверх-вправо.jpg');
    8: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вверх-влево-вправо.jpg');
    9: MyJpeg.LoadFromFile('C:\Users\Vlad\LightSwords.ucoz.com\Клетки для карты\Вверх-влево.jpg');
   end;
   SizePos:=Fs.Position;    //сохраняем позицию в файле, куда надо записать размер
   fs.Write(imgSize,SizeOf(imgSize)); //резервируем пару:) байт для размера
   //Дальше записываем картинку
   //а если Jpg - то
   MyJpeg.SaveToStream(fs);
   ImgSize:=fs.Position-sizePos;  //вычисляем размер картинки
   Fs.Seek(SizePos,SoFromBeginning);  //Возвращаемся к тому месту, куда надо записать размер
   fs.Write(imgSize,SizeOf(imgSize));  //записывем
   Fs.Seek(0,SoFromEnd)         //Возвращаемся в конец файла
  end;
 fs.Free;
end;
The Best вне форума Ответить с цитированием
Старый 03.08.2009, 22:05   #26
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Киньте плиз исходник, а я сам там разберусь, а то я долго буду ещё тормозить(наверное). Заранее спасибо.
blackstersl вне форума Ответить с цитированием
Старый 03.08.2009, 22:54   #27
hoza_syl
Форумчанин
 
Аватар для hoza_syl
 
Регистрация: 23.05.2008
Сообщений: 219
По умолчанию

блин - тока что понял. Вот тут грубая ошибка:

Код:
ImgSize:=fs.Position-sizePos;
Надо:
Код:
ImgSize:=fs.Position-sizePos+sizeOf(int64);
Лоханулся. А чтение верное, все правильно. Сори.
The Revolution is Now!
hoza_syl вне форума Ответить с цитированием
Старый 04.08.2009, 00:01   #28
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

если у меня чтение правильно почему выдаёт ошибку на строчке:


Код:
var
fs:TFileStream;
ms: TMemoryStream;
img: TImage;
i:integer;
imgSize: int64;
sizePos: int64;
begin
ms:=TMemoryStream.Create;
fs:=TFileStream.Create('e:\myfile.mmp',fmOpenRead);
sizePos:=0;

for I:=1 to 3 do
begin
ms.clear;
imgsize:=fs.Read(imgSize,SizeOf(imgSize));
ms.CopyFrom(fs,imgSize);
img.Picture.Bitmap.LoadFromStream(ms);
image5.Canvas.Draw(0,0,img.Picture.bitmap);
end;
ms.Free;

end;
blackstersl вне форума Ответить с цитированием
Старый 04.08.2009, 01:26   #29
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

А ты его создал? Я имидж имею ввиду.
Отладь всё отдельно и найдешь ошибку.
И отвыкайте уже жесткие ссылки на файлы делать, это будет работать только у вас на машине и то до поры до времени.

з.ы. Точно, не создал, создай его: img:=TImage.Create(форма-владелец); можно nil если он тебе визуально не нужен, но тогда тут TBitmap в самый раз.
а потом освободи: img.free;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.08.2009 в 01:34.
mutabor вне форума Ответить с цитированием
Старый 04.08.2009, 12:41   #30
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

А у меня всё равно не пашет.. Возникает JPEG error #42

Последний раз редактировалось The Best; 04.08.2009 в 12:45.
The Best вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание своего архиватора kuzmich Общие вопросы Delphi 9 08.01.2009 06:17
создание своего формата данных CyberOrcX Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 02.12.2008 17:36
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28
Проблемы расширения базы нужен скрип serg-php PHP 10 10.02.2008 19:15
Создание своего формата AnaSha Microsoft Office Excel 1 09.01.2007 16:20