Такой вопрос: мне нужно из едита побитно запихнуть в байты цвета файла-контейнера биты текста. Есть проблема, заголовок считываю, а вот как дальше считывать байты по отдельности я не знаю. Помогите, как доставать к примеру каждый 100-ый байт цвета до конца файла и изменять его?
Delphi |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, ExtDlgs, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
MainMenu1: TMainMenu;
SaveDialog1: TSaveDialog;
OpenPictureDialog1: TOpenPictureDialog;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
RadioButton1: TRadioButton;
RadioButton2: TRadioButton;
Label1: TLabel;
ListBox1: TListBox;
Button2: TButton;
Image1: TImage;
Button3: TButton;
Edit1: TEdit;
procedure N5Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1; Bitmap: TBitmap; bmpfile:file of byte;
pointer:integer;
btr,btw,i:byte; z:dword;
implementation
{$R *.dfm}
procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Button2Click(Sender: TObject); //proverka konteynera
var //
fileheader: TBitmapfileheader; //
infoheader: TBitmapinfoheader; //
s: TFilestream; //
begin //
s := TFileStream.Create(openpicturedialog1.filename, fmOpenRead);
try
s.Read(fileheader, SizeOf(fileheader));
s.Read(infoheader, SizeOf(infoheader));
finally
s.Free;
end;
listbox1.Items.Clear;
listbox1.Items.Add('Filesize: ' + IntToStr(fileheader.bfSize));
listbox1.Items.Add('Width: ' + IntToStr(infoheader.biWidth));
listbox1.Items.Add('Height: ' + IntToStr(infoheader.biHeight));
listbox1.Items.Add('BitCount: ' + IntToStr(infoheader.biBitCount));
listbox1.Items.Add('type: ' + IntToStr(fileheader.bfType));
listbox1.Items.Add('compr: ' + IntToStr(infoheader.biCompression));
listbox1.Items.Add('sdvig k 1 baytu: ' + IntToStr(fileheader.bfOffBits));
if (fileheader.bfType<>$4d42) then //
begin // proverka na BMP
ShowMessage('Eto ne BMP'); //
exit; //
end;
if infoheader.biPlanes <> 1 then
begin // ÷èñëî ïëîñêîñòåé äîëæíî áûòü =åäèíèöå
ShowMessage('Mnogo ploskostey'); //
exit; //
end; //
if (infoheader.biBitCount <> 24) then
begin // kol-vo bit na piksel`
ShowMessage('Ne 24 bita na piksel`'); //
exit; //
end; //
if (infoheader.biCompression <> 0 ) then//
begin // est` li kompressiya
ShowMessage('Est` kompressiya'); //
exit; //
end; //
end;
procedure TForm1.N2Click(Sender: TObject); //menu open
begin
openpicturedialog1.Execute;
assignfile(bmpfile,openpicturedialog1.filename);
end;
procedure TForm1.Button1Click(Sender: TObject); //main buton
var t:string;
begin
if (RadioButton1.Checked = True) then i:=$FE else //
begin //
if (RadioButton2.Checked = True) then i:=$FC else //
begin // proverka bitov
ShowMessage('Choose bit-change'); //
exit; //
end; //
end; //
// Edit1.Text:='Ïðèñâàèâàåì òåêñò';
// t:=edit1.text;
end;
end. |
|
З.Ы. Из эдита я пытаюсь присвоить его значения в переменную типа "строки", но оно в переменную не заноистся ни под каким предлогом... что за ?