Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Внизпомогите исправить ошибку Найти похожие ветки
← →
>>DEATH<< (2007-03-27 05:45) [0]значит написал небольшую функцию(для шифровки изображений,,впрочем эт не важно)..все работает нормально..как только я нажимаю кнопку на которой стоит выполнение этой функции приложение выдает такое окошко 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;
кто знает скажите что не так
← →
Джо © (2007-03-27 06:28) [1]> temp.Picture.Bitmap:=image;
Кто будет создавать объекты перед их использованием?
И вообще непонятно, зачем тут этот TImage.
← →
>>DEATH<< (2007-03-28 07:10) [2]
>
> Кто будет создавать объекты перед их использованием?
>
а как создать объект(учу delphi сам без учебников на примерах так что посмотреть негде) ткните носом что где написать..заранее спасибо)))
← →
Loginov Dmitry © (2007-03-28 07:47) [3]> учу delphi сам без учебников на примерах
В крайнем случае хэлп-то должен у тебя присутствовать. Вот и почитай там про объектную модель Delphi.
← →
bagos (2007-03-28 07:51) [4]если не ошибаюсь:
temp:=timage.create(self);
← →
Gydvin © (2007-03-28 09:07) [5]А зачем timage? Используйте tbitmap там тоже канва есть и не нужно создавать новый лишняя трата ресурсов, используйте
function codeimage(image:tbitmap):string;
Кроме того
> temp.Picture.Bitmap:=image;
Идеологически неверно имхо
нужно так
temp.Picture.Bitmap.assign(image)
← →
>>DEATH<< (2007-03-28 09:37) [6]
> А зачем timage? Используйте tbitmap там тоже канва есть
> и не нужно создавать новый лишняя трата ресурсов, используйте
> function codeimage(image:tbitmap):string;
сделал так вот только всеравно та же ошибка
← →
Gydvin © (2007-03-28 10:00) [7]А где содержание этой кнопки?
← →
icWasya © (2007-03-28 11:09) [8]лучше сразу сделай так
temp:tbitmap; // раз
.....
begin
temp:=tbitmap.create;//два
temp.assign(image);
а в конце
temp.free;//три
← →
RASkov (2007-03-28 13:07) [9]> [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.....
← →
Gydvin © (2007-03-28 13:28) [10]ошибка где-то вне этой функции
← →
>>DEATH<< (2007-03-28 13:43) [11]ну для начала я уже давно перевел с Timage на Tbitmap..то что посоветовал RASkov мнебольше нравится..
← →
RASkov (2007-03-28 14:20) [12]Кстати и локальная переменная res тоже ни к чему.... Так как ты делаешь, можно и с Result сразу напрямую.
В итоге вот такой вот скилет:function CodeImage(image: TBitmap): String;
var r, g, b: Byte;
x, y, ImW, ImH: Integer;
begin
...
end;
← →
>>DEATH<< (2007-03-28 14:28) [13]
> Кстати и локальная переменная 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:47) [14]
> а x, y может тоже byte сделать ведь они 0..255
В конкретном случае разницы нет(более того может с Byte даже и лучше), но желательно использовать переменные "более родных" типов...
Вдруг тебе понадобится не ImW:=255, а больше, ты в коде функции исправишь на это: if image.Width>356 then ImW:=355 else ImW:=image.Width-1;
но забудешь поменять тип у X и Y в описании...
Ошибки синтаксической не будет, но будет логическая и твоя функция работать будет не верно.
← →
Loginov Dmitry © (2007-03-28 14:57) [15]> В конкретном случае разницы нет(более того может с Byte
> даже и лучше)
Вообще в качестве счетчика цикла правильнее задавать знаковую переменную. Меньше риска нарваться на грабли.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c