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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 20:56   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию BlockWrite Проверьте правильность, пожалуйста.

В первый раз общаюсь с этой функой. Скажите пожалуйста, правильно ли я записываю палитры? (все по очереди в один файл)
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Image1: TImage;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ImArr: Array[0..26] of ShortString =
  ('ABTD','ABTL','CLSD','CLSL','DDPD','DDPL','DOWN','DUPD','DUPL',
   'HLPD','HLPL','HSTD','HSTL','LEFT','MIDDLE','MNMD','MNML','RIGHT',
   'SAYD','SAYL','STND','STNL','UDPD','UDPL','UP','UUPD','UUPL');
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
 X,Y:SmallInt;
 I:Byte;
 J:Byte;
 N:Array[0..15] of Integer;
 F:File;
begin
AssignFile(F,'Palette.pal');
Rewrite(F,SizeOf(Integer)*16);
For J := 0 to 26 do
begin
 Image1.Picture.LoadFromFile(ImArr[J]+'.bmp');
For I:=0 to 15 do N[I] := 5;
 For Y:=0 to Image1.Height - 1 do // отсюда
  For X:=0 to Image1.Width -1 Do
   Begin
   I:=0;
   While N[i]<> Image1.Canvas.Pixels[X,Y] do
    If N[i] = 5 Then N[i] := Image1.Canvas.Pixels[X,Y] Else
     Inc(I);
   End; // до сюда код правильный, который просто заполняет N[0..15]
   Memo1.Clear;
For I := 0 to 15 do Memo1.Lines.Add(IntToHex(N[I],6));

BlockWrite(F,N,1);
End;
CloseFile(F);

end;

end.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 18.11.2009 в 21:01.
Alex Cones вне форума Ответить с цитированием
Старый 18.11.2009, 21:11   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Код:
//использование
BlockWrite(F, N, sizeof(n));
тут ошибки:
Код:
BlockWrite(F,N,1);
End;
CloseFile(F);

...может так
End;
BlockWrite(F,N,1);
CloseFile(F);
нет, может вынести за цикл?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 18.11.2009, 21:15   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
нет, может вынести за цикл?
Содержимое N меняется с каждым циклом, поэтому необходимо записывать данные, пока они не изменились (т.е. не открылось новое изображение с новой палитрой).

Цитата:
BlockWrite(F, N, sizeof(n));
Не совсем ясно, почему неправильно Rewrite(F,SizeOf(Integer)*16); Ведь N - массив из интеджера, размером в 16.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.11.2009, 21:23   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Содержимое N меняется с каждым циклом
тогда
Код:
BlockWrite(F, N[i], 1);

UPD
--------

...вообще лучше сделать структуру и грузить ее из/в файл:
Код:
type
  //FILE STRUCT-
  TKN=record
   Nn: Array[0..15] of integer;
  end;
  tint=record
   IMG: Array[0..26] of TKN;
  end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
const  ImArr: array[0..26] of string= ('1','1','1','1','1','1','1','1','1','1',
                                       '1','1','1','1','1','1','1','1','1','1',
                                       '1','1','1','1','1','1','1');
Var
 X,Y:SmallInt;
 I:Byte;
 J:Byte;
 N:Array[0..15] of Integer;
 F:File;
 //
 fDAT: TMemoryStream;
 int : tint;
begin
 Memo1.Clear;
 fDAT:= TMemoryStream.Create;

 For J := low(ImArr) to high(ImArr) do begin
  Image1.Picture.LoadFromFile(ImArr[J]+'.bmp');
  For I:=0 to 15 do N[i] := 5;
  For Y:=0 to Image1.Height - 1 do // отсюда
  For X:=0 to Image1.Width -1 Do Begin
   I:=0;
   While N[i]<> Image1.Canvas.Pixels[X,Y] do
    If N[i] = 5 Then N[i] := Image1.Canvas.Pixels[X,Y] Else
     Inc(I);
  End;


  For I := 0 to 15 do begin Memo1.Lines.Add(inttostr(j)+ '- ' +IntToHex(N[i],6));
   int.IMG[j].Nn[i]:= N[i] // заполняем
  end
 End;

 fDAT.Write(int, SIZEOF(int));
 fDAT.SaveToFile('1.dat');
 fDAT.Free
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
 I:Byte;
 J:Byte;
 //
 fDAT: TMemoryStream;
 int : tint;
begin
 Memo2.Clear;
 //
 fDAT:= TMemoryStream.Create;
 fDAT.LoadFromFile('1.dat');
 fDAT.Read(int, SIZEOF(int));

 For J := 0 to 26 do
  For I := 0 to 15 do memo2.Lines.Add(inttostr(j)+ '- ' +IntToHex(int.IMG[j].Nn[i],6));

 fDAT.Free
end;
Изображения
Тип файла: jpg скрин.jpg (28.0 Кб, 40 просмотров)
Вложения
Тип файла: zip хэдер.zip (8.1 Кб, 6 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 18.11.2009 в 22:39.
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверьте на правильность плиз Agent[PNZ] Помощь студентам 3 11.06.2014 19:50
Проверьте на правильность!! Dawystrik Общие вопросы Delphi 2 21.03.2009 21:04
пожалуйста проверьте правильность проги на языке паскаль! владимир/к. Паскаль, Turbo Pascal, PascalABC.NET 3 21.01.2009 08:54
Проверьте правильность пожалуйста Анжелика Помощь студентам 17 11.01.2009 00:28
Проверьте правильность Аленушка Помощь студентам 6 07.01.2009 17:07