![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
помогите исправить ошибку
>>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]А где содержание этой кнопки?
>>DEATH<< (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.
>>DEATH<< (2007-03-28 07:10:00) [14]
>
> Кто будет создавать объекты перед их использованием?
>
а как создать объект(учу delphi сам без учебников на примерах так что посмотреть негде) ткните носом что где написать..заранее спасибо)))
Джо (2007-03-27 06:28:00) [15]> temp.Picture.Bitmap:=image;
Кто будет создавать объекты перед их использованием?
И вообще непонятно, зачем тут этот TImage.