Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите исправить ошибку


>>DEATH<< ©   (2007-03-27 05:45:00) 

значит написал небольшую функцию(для шифровки изображений,,впрочем эт не важно)..все работает нормально..как только я нажимаю кнопку на которой стоит выполнение этой функции приложение выдает такое окошко http://slil.ru/24141072

вот сама функция:
function codeimage(image:tbitmap):string;
var
 x, y, r, g, b:byte;
 temp:timage;
 res:string;
begin
temp.Picture.Bitmap:=image;
if temp.Width>256 then temp.Width:=256;
if temp.Height>256 then temp.Height:=256;
res:=inttohex(temp.Width,2)+inttohex(temp.Height,2);
for y:=0 to temp.Height-1 do
for x:=0 to  temp.Width-1 do begin
r:=GetRValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
g:=GetGValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
b:=GetBValue(ColorToRGB(temp.Canvas.Pixels[x,y]));
res:=res+inttohex(r,2)+inttohex(g,2)+inttohex(b,2);
end;
result:=res;
end;


кто знает скажите что не так


Loginov Dmitry   (2007-03-28 14:57:00) [1]

> В конкретном случае разницы нет(более того может с Byte
> даже и лучше)


Вообще в качестве счетчика цикла правильнее задавать знаковую переменную. Меньше риска нарваться на грабли.


RASkov   (2007-03-28 14:47:00) [2]


> а x, y может тоже byte сделать ведь они 0..255

В конкретном случае разницы нет(более того может с Byte даже и лучше), но желательно использовать переменные "более родных" типов...
Вдруг тебе понадобится не ImW:=255, а больше, ты в коде функции исправишь на это: if image.Width> 356then ImW:= 355else ImW:=image.Width-1;
но забудешь поменять тип у X и Y в описании...
Ошибки синтаксической не будет, но будет логическая и твоя функция работать будет не верно.


>>DEATH<<   (2007-03-28 14:28:00) [3]


> Кстати и локальная переменная res тоже ни к чему.... Так
> как ты делаешь, можно и с Result сразу напрямую.
> В итоге вот такой вот скилет:
> function CodeImage(image: TBitmap): String;
> var r, g, b: Byte;
>    x, y, ImW, ImH: Integer;
> begin
> ...
> end;
>

а x, y может тоже byte сделать ведь они 0..255


RASkov   (2007-03-28 14:20:00) [4]

Кстати и локальная переменная resтоже ни к чему.... Так как ты делаешь, можно и с Result сразу напрямую.
В итоге вот такой вот скилет:
function CodeImage(image: TBitmap): String;
var r, g, b: Byte;
   x, y, ImW, ImH: Integer;
begin
...
end;


>>DEATH<<   (2007-03-28 13:43:00) [5]

ну для начала я уже давно перевел с Timage на Tbitmap..то что посоветовал RASkov   мнебольше нравится..


Gydvin   (2007-03-28 13:28:00) [6]

ошибка где-то вне этой функции


RASkov   (2007-03-28 13:07:00) [7]

> [0] >>DEATH<<   (27.03.07 05:45)
> function codeimage(image:tbitmap):string;
> var
> x, y, r, g, b:byte;
> temp:timage;
ImW, ImH: Integer;
> res:string;
> begin

Он(temp:timage) по всей видимости тебе вобще здесь не нужен.... Работай напрямую с image:tbitmap переданным поссылке, размеры ему менять ни к чему конечно, лучше так:
if image.Width>256 then ImW:=255 else ImW:=image.Width-1; //тоже и с Height
соответственно циклы будут
for y:=0 to ImH do
for x:=0 to ImW do begin.....


icWasya   (2007-03-28 11:09:00) [8]

лучше сразу сделай так

temp:tbitmap; // раз
.....
begin
temp:=tbitmap.create;//два
temp.assign(image);

а в конце
temp.free;//три


Gydvin   (2007-03-28 10:00:00) [9]

А где содержание этой кнопки?


&gt;&gt;DEATH&lt;&lt;   (2007-03-28 09:37:00) [10]


> А зачем timage? Используйте tbitmap там тоже канва есть
> и не нужно создавать новый лишняя трата ресурсов, используйте
> function codeimage(image:tbitmap):string;

сделал так вот только всеравно та же ошибка


Gydvin   (2007-03-28 09:07:00) [11]

А зачем timage? Используйте tbitmap там тоже канва есть и не нужно создавать новый лишняя трата ресурсов, используйте
function codeimage( image:tbitmap):string;

Кроме того


> temp.Picture.Bitmap:=image;

Идеологически неверно имхо

нужно так
temp.Picture.Bitmap.assign(image)


bagos   (2007-03-28 07:51:00) [12]

если не ошибаюсь:
temp:=timage.create(self);


Loginov Dmitry   (2007-03-28 07:47:00) [13]

> учу delphi сам без учебников на примерах


В крайнем случае хэлп-то должен у тебя присутствовать. Вот и почитай там про объектную модель Delphi.


&gt;&gt;DEATH&lt;&lt;   (2007-03-28 07:10:00) [14]


>
> Кто будет создавать объекты перед их использованием?
>

а как создать объект(учу delphi сам без учебников на примерах так что посмотреть негде) ткните носом что где написать..заранее спасибо)))


Джо   (2007-03-27 06:28:00) [15]

> temp.Picture.Bitmap:=image;

Кто будет создавать объекты перед их использованием?
И вообще непонятно, зачем тут этот TImage.


Наверх

Титульная страница Поиск, карта сайта Написать письмо