Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
Внизописание процедур Найти похожие ветки
← →
PHoeNiX (2008-06-06 09:26) [0]Есть раздел описания переменных и процедуры изменения резкости, контрастности, яркости и вращения изображения. Нужно для каждой процедуры алгоритм и принцип работы(хотябы 5-6 предложений на каждую процедуру).Выручайте пожалуйста
var
Form4:TForm4;
OrigBmp:TBitmap;
a,c,e:integer;
RedValue1,GreenValue1,BlueValue1:integer;
flag:boolean;
const
MaxPixelCount=32768;
type
pRGBArray=^TRGBArray;
TRGBArray=ARRAY[0..MaxPixelCount-1]OFTRGBTriple;
procedureRezkost(Bmp:TBitmap;Correction:integer);
type
TRGBArray=array[Word]ofTRGBTriple;
PRGBArray=^TRGBArray;
var
Filter:array[0..8]ofinteger;//matricede3*3pixels
Red,Green,Blue,NewR,NewG,NewB,I,
PosX,PosY,mX,mY,dX,dY,Diviseur:integer;
TabScanlineBmp:arrayofPRGBArray;
TabScanlineFinalBmp:arrayofPRGBArray;
FinalBmp:TBitmap;
begin
forI:=0toHigh(Filter)do
ifIin[0,2,6,8]thenFilter[I]:=-Correction
elseifI=4thenFilter[I]:=(Correction*4)+128//+128permetunecorrectionbienйtalйe
elseFilter[I]:=0;
Diviseur:=Filter[4]-(Correction*4);
FinalBmp:=TBitmap.Create;
try
FinalBmp.Assign(Bmp);
SetLength(TabScanlineBmp,Bmp.Height);
SetLength(TabScanlineFinalBmp,Bmp.Height);
forI:=0toBmp.Height-1do
begin
TabScanlineBmp[I]:=Bmp.Scanline[I];
TabScanlineFinalBmp[I]:=FinalBmp.Scanline[I];
end;
forPosY:=0toBmp.Height-1do
forPosX:=0toBmp.Width-1do
begin
NewR:=0;
NewG:=0;
NewB:=0;
fordY:=-1to1do
fordX:=-1to1do
begin
//positiondupixelаtraiter
mY:=PosY+dY;
mX:=PosX+dX;
//Vйrificationdeslimitespourйviterleseffetsdebord
//LecturedescomposantesRGBdechaquepixel
if(mY>=1)and(mY<=BMP.Height-1)
and(mX>=1)and(mX<=BMP.Width-1)then
begin
Red:=TabScanlineBmp[mY,mX].RGBTRed;
Green:=TabScanlineBmp[mY,mX].RGBTGreen;
Blue:=TabScanlineBmp[mY,mX].RGBTBlue;
end
else
begin
Red:=TabScanlineBmp[PosY,PosX].RGBTRed;
Green:=TabScanlineBmp[PosY,PosX].RGBTGreen;
Blue:=TabScanlineBmp[PosY,PosX].RGBTBlue;
end;
I:=4+(dY*3)+dX;//Ipeutvarierde0а8
NewR:=NewR+Red*Filter[I];
NewG:=NewG+Green*Filter[I];
NewB:=NewB+Blue*Filter[I];
end;
NewR:=NewRdivDiviseur;
NewG:=NewGdivDiviseur;
NewB:=NewBdivDiviseur;
ifNewR>255thenNewR:=255elseifNewR<0thenNewR:=0;
ifNewG>255thenNewG:=255elseifNewG<0thenNewG:=0;
ifNewB>255thenNewB:=255elseifNewB<0thenNewB:=0;
TabScanlineFinalBmp[PosY,PosX].RGBTRed:=NewR;
TabScanlineFinalBmp[PosY,PosX].RGBTGreen:=NewG;
TabScanlineFinalBmp[PosY,PosX].RGBTBlue:=NewB;
end;
Bmp.Assign(FinalBmp);
finally
FinalBmp.Free;
Finalize(TabScanlineBmp);
Finalize(TabScanlineFinalBmp);
end;
end;
procedureContrast(Bitmap:TBitmap;Value:Integer;Local:Boolean);
functionBLimit(B:Integer):Byte;
begin
ifB<0then
Result:=0
elseifB>255then
Result:=255
else
Result:=B;
end;
var
Dest:pRGBTriple;
x,y,mr,mg,mb,
W,H,tr,tg,tb:Integer;
vd:Double;
begin
ifValue=0then
Exit;
W:=Bitmap.Width-1;
H:=Bitmap.Height-1;
ifLocalthen
begin
mR:=128;
mG:=128;
mB:=128;
end
else
begin
tr:=0;
tg:=0;
tb:=0;
fory:=0toHdo
begin
Dest:=Bitmap.ScanLine[y];
forx:=0toWdo
begin
withDest^do
begin
Inc(tb,rgbtBlue);
Inc(tg,rgbtGreen);
Inc(tr,rgbtRed);
end;
Inc(Dest);
end;
end;
mB:=Trunc(tb/(W*H));
mG:=Trunc(tg/(W*H));
mR:=Trunc(tr/(W*H));
end;
ifValue>0then
vd:=1+(Value/10)
else
vd:=1-(Sqrt(-Value)/10);
fory:=0toHdo
begin
Dest:=Bitmap.ScanLine[y];
forx:=0toWdo
begin
withDest^do
begin
rgbtBlue:=BLimit(mB+Trunc((rgbtBlue-mB)*vd));
rgbtGreen:=BLimit(mG+Trunc((rgbtGreen-mG)*vd));
rgbtRed:=BLimit(mR+Trunc((rgbtRed-mR)*vd));
end;
Inc(Dest);
end;
end;
form3.Image1.Refresh;
end;
procedureTForm4.TrackBar_BrightnessChange(Sender:TObject);
vari,j,RedValue2,GreenValue2,BlueValue2:integer;
OrigRow,DestRow:pRGBArray;
begin
//getbrightnessincrementvalue
IfTrackBar_Brightness.Position<>0then
Begin
RedValue2:=TrackBar_Brightness.Position;
GreenValue2:=TrackBar_Brightness.Position;
BlueValue2:=TrackBar_Brightness.Position;
ifRedValue2<0thenlabel_Brightness.Caption:=Format("Яркость:%d",[RedValue2])
elseLabel_Brightness.Caption:=Format("Яркость:+%d",[RedValue2]);
//foreachrowofpixels
fori:=0toform3.Image1.Picture.Height-1do
begin
Origrow:=form3.Image1.Picture.Bitmap.ScanLine[i];
DestRow:=form3.Image1.Picture.Bitmap.ScanLine[i];
//foreachpixelinrow
forj:=0toform3.Image1.Picture.Width-1do
begin
//addbrightnessvaluetopixel"sRGBvalues
if(RedValue2-RedValue1)>0then
DestRow[j].rgbtRed:=Min(255,OrigRow[j].rgbtRed+3)
else
DestRow[j].rgbtRed:=Max(0,OrigRow[j].rgbtRed-1);
if(GreenValue2-GreenValue1)>0then
DestRow[j].rgbtGreen:=Min(255,OrigRow[j].rgbtGreen+3)
else
DestRow[j].rgbtGreen:=Max(0,OrigRow[j].rgbtGreen-1);
if(BlueValue2-BlueValue1)>0then
DestRow[j].rgbtBlue:=Min(255,OrigRow[j].rgbtBlue+3)
else
DestRow[j].rgbtBlue:=Max(0,OrigRow[j].rgbtBlue-1);
end;
end;
form3.Image1.Refresh;
RedValue1:=RedValue2;
GreenValue1:=GreenValue2;
BlueValue1:=BlueValue2;
End;
end;
procedureRotateBitmap(Bitmap:TBitmap;Angle:Double;BackColor:TColor);
type
TRGB=record
B,G,R:Byte;
end;
pRGB=^TRGB;
pByteArray=^TByteArray;
TByteArray=array[0..32767]ofByte;
TRectList=array[1..4]ofTPoint;
var
x,y,W,H,v1,v2:Integer;
Dest,Src:pRGB;
VertArray:arrayofpByteArray;
Bmp:TBitmap;
procedureSinCos(AngleRad:Double;varASin,ACos:Double);
begin
ASin:=Sin(AngleRad);
ACos:=Cos(AngleRad);
end;
functionRotateRect(constRect:TRect;constCenter:TPoint;Angle:Double):
TRectList;
var
DX,DY:Integer;
SinAng,CosAng:Double;
functionRotPoint(PX,PY:Integer):TPoint;
begin
DX:=PX+Center.x;
DY:=PY+Center.y;
Result.x:=Center.x+Round(DX*CosAng-DY*SinAng);
Result.y:=Center.y+Round(DX*SinAng+DY*CosAng);
end;
begin
SinCos(Angle*(Pi/180),SinAng,CosAng);
Result[1]:=RotPoint(Rect.Left,Rect.Top);
Result[2]:=RotPoint(Rect.Right,Rect.Top);
Result[3]:=RotPoint(Rect.Right,Rect.Bottom);
Result[4]:=RotPoint(Rect.Left,Rect.Bottom);
end;
functionMin(A,B:Integer):Integer;
begin
ifA<Bthen
Result:=A
else
Result:=B;
end;
functionMax(A,B:Integer):Integer;
begin
ifA>Bthen
Result:=A
else
Result:=B;
end;
functionGetRLLimit(constRL:TRectList):TRect;
begin
Result.Left:=Min(Min(RL[1].x,RL[2].x),Min(RL[3].x,RL[4].x));
Result.Top:=Min(Min(RL[1].y,RL[2].y),Min(RL[3].y,RL[4].y));
Result.Right:=Max(Max(RL[1].x,RL[2].x),Max(RL[3].x,RL[4].x));
Result.Bottom:=Max(Max(RL[1].y,RL[2].y),Max(RL[3].y,RL[4].y));
end;
procedureRotate;
var
x,y,xr,yr,yp:Integer;
ACos,ASin:Double;
Lim:TRect;
begin
W:=Bmp.Width;
H:=Bmp.Height;
SinCos(-Angle*Pi/180,ASin,ACos);
Lim:=GetRLLimit(RotateRect(Rect(0,0,Bmp.Width,Bmp.Height),Point(0,0),
Angle));
Bitmap.Width:=Lim.Right-Lim.Left;
Bitmap.Height:=Lim.Bottom-Lim.Top;
Bitmap.Canvas.Brush.Color:=BackColor;
Bitmap.Canvas.FillRect(Rect(0,0,Bitmap.Width,Bitmap.Height));
fory:=0toBitmap.Height-1do
begin
Dest:=Bitmap.ScanLine[y];
yp:=y+Lim.Top;
forx:=0toBitmap.Width-1do
begin
xr:=Round(((x+Lim.Left)*ACos)-(yp*ASin));
yr:=Round(((x+Lim.Left)*ASin)+(yp*ACos));
if(xr>-1)and(xr<W)and(yr>-1)and(yr<H)then
begin
Src:=Bmp.ScanLine[yr];
Inc(Src,xr);
Dest^:=Src^;
end;
Inc(Dest);
end;
end;
end;
begin
Bitmap.PixelFormat:=pf24Bit;
Bmp:=TBitmap.Create;
try
Bmp.Assign(Bitmap);
W:=Bitmap.Width-1;
H:=Bitmap.Height-1;
Rotate
finally
Bmp.Free;
end;
end;
← →
Рамиль © (2008-06-06 09:29) [1]Ты их написал? Если писал, то какая проблема написать пять-шесть предложений?
Если код не твой, то бегом за метлой, пока не закончились в магазинах. А то скоро дефицитным товаром станут.
← →
Тын-Дын © (2008-06-06 10:00) [2]
> PHoeNiX (06.06.08 09:26)
Предлагаю комменты взять там же, где код.
← →
Ляпа (2008-06-06 12:38) [3]http://delphimaster.net/view/15-1211392855/
← →
PHoeNiX (2008-06-06 16:46) [4]
> Предлагаю комменты взять там же, где код.
код взят с DelphiWorld 6. Словесного описания нет. И нигде нет..
> Ты их написал? Если писал, то какая проблема написать пять-
> шесть предложений?
если бы я целиком и полностью сам писал код этих процедур, то я бы не спрашивал.
> Если код не твой, то бегом за метлой, пока не закончились
> в магазинах. А то скоро дефицитным товаром станут.
не смешно
← →
Рамиль © (2008-06-06 17:14) [5]Вот именно, что не смешно.
← →
Омлет (2008-06-06 17:36) [6]О Боже, последнюю про вращение писал я, лет семь назад, еще в школе, а потом гордо положил в единую базу процедур и функций. Я же не думал, что кто-то будет это использовать ))
← →
Омлет (2008-06-06 17:40) [7]Вот здесь хотя бы отформатированы:
http://kladovka.net.ru/delphibase/?action=viewtopic&topic=mediaimg
← →
Рамиль © (2008-06-06 17:54) [8]
> Омлет (06.06.08 17:40) [7]
А почему без комментариев выложил? Видишь, люди мучаются.
← →
Омлет (2008-06-06 18:01) [9]> Рамиль © (06.06.08 17:54) [8]
Как было, так и выложил, не прибавив, не убавив )
← →
PHoeNiX (2008-06-06 19:03) [10]to Рамиль, to Омлет.
Я понял, что вы ничем не поможете. Зачем разводить демогогию и стебаться. Был конкретный вопрос. Нет конкретного ответа, не надо умничать
← →
ketmar © (2008-06-06 19:20) [11]>[10] PHoeNiX (2008-06-06 19:03:00)
опять ребёнок-хам. тебя сюда звали? просили пояснять нам, что делать, а что нет? не звали. не просили. веди себя прилично, сиди и слушай. не можешь, не хочешь — интернеты большие.
---
All Your Base Are Belong to Us
← →
Игорь Шевченко © (2008-06-06 19:22) [12]
> Нужно для каждой процедуры алгоритм и принцип работы
А ты программист или тоже раз в месяц на полчаса от метлы отрываешься ?
← →
palva © (2008-06-06 19:34) [13]Сначала берем где-то непонятно кем написанный код...
Затем просим на форуме исправить ошибки, чтобы заработало...
Теперь уже комментарии нужны. Только не надо грузить всякими объяснениями - именно комментарии вставить в нужное место кода.
Осталось только свой копирайт поставить.
Вот путь к успеху и финансовому благополучию!
← →
Ega23 © (2008-06-06 19:49) [14]Совсем студенты-недоучки обнаглели...
Вот не понимаю я, нафига учиться программировать, если ты не то, что написать сам - не можешь сам разобраться в ГОТОВОМ коде???
З.Ы. Ща пойдут отмазы, что "я вообще не на программиста учусь", "препод - козёл, в семестре ничего не давал и семинаров-лекций не проводил" и "да мне бы только зачОт сдать"...
← →
ketmar © (2008-06-06 20:02) [15]>[14] Ega23 © (2008-06-06 19:49:00)
да-да. «код не мой, я только пост разместил»
---
All Your Base Are Belong to Us
← →
PHoeNiX (2008-06-06 20:05) [16]> ketmar
1) не ребенок
2) не хам, я думаю вам тоже было бы не приятно, если бы вас обсуждали в неприятном ракурсе
> Игорь Шевченко
Я не программист, но учусь
> pavla
код процедур взят у преподавателя. Процедуры использовались для написания графического редактора (без посторонней помощи), который нормально работает.
> ega32
Между прочим учусь я хорошо и отмазы мне не нужны.
← →
Ega23 © (2008-06-06 20:13) [17]
> Я не программист, но учусь
Ложь.
> Между прочим учусь я хорошо и отмазы мне не нужны.
Ещё одна ложь.
Если бы ты учился хорошо, то вопрос бы стоял так:Есть раздел описания переменных и процедуры изменения резкости, контрастности, яркости и вращения изображения. Нужно для каждой процедуры алгоритм и принцип работы(хотябы 5-6 предложений на каждую процедуру). Я написал вот это, это и вот это, но у меня нет уверенности, что вот к этой процедуре я написал правильно (потому что ....). Правильно ли я написал и обоснованы ли мои сомнения? Выручайте пожалуйста
И отношение было бы совершенно другое: человек действительно поработал головой, но, поскольку ещё только учится - его гложут сомнения.
← →
palva © (2008-06-06 20:15) [18]
PHoeNiX (06.06.08 20:05) [16]
> код процедур взят у преподавателя.
Ну это я не про вас, конечно. Ворчу абстрактно.
← →
Ega23 © (2008-06-06 20:15) [19]А так - ещё один халявщик. Который почему-то считает, что форум существует для того, чтобы ему делали работу.
Форум существует для того, чтобы помогать. А не делать за тебя.
Почувствуй разницу.
← →
Игорь Шевченко © (2008-06-06 20:21) [20]
> Я не программист, но учусь
> Нужно для каждой процедуры алгоритм и принцип работы(хотябы
> 5-6 предложений на каждую процедуру).Выручайте пожалуйста
Обучение обычно предполагает самостоятельный процесс. Форум как бы не учится и не давал тебе заданий.
> код процедур взят у преподавателя
Тогда наверняка преподаватель будет так любезен, что расскажет и алгоритм.
Впрочем, я сильно сомневаюсь, чтобы преподаватель давал код, подобный этому:
> forx:=0toBitmap.Width-1do
Блин, не дай бог, выучишься, кому-то с тобой ведь и работать придется.
← →
palva © (2008-06-06 20:25) [21]
> > forx:=0toBitmap.Width-1do
Источник кода pdf-файл или что-то вроде. Во всяком случае не файл pas. Копипаст съел форматирование и пробелы. А автор даже на него не посмотрел, чтобы разобраться, исправить и опробовать в деле.
← →
PHoeNiX (2008-06-06 20:27) [22]Я не халаявщик. И вобще, чего я отговариваюсь. Вы меня не видели, не знаете, а судите человека по событиям, которые не отражают сущность.
Все равно я доволен тем, что проучив в универе 3 месяца Turbo Pascal, я за короткий промежуток времени изучил Delphi хотя бы на начальном, начинающем уровне. Пусть даже я использовал 3 процедуры. Я сомневаюсь, что вы через 3-4 недели изучения delphi смогли бы написать эти процедуры без чьей-либо помощи
← →
PHoeNiX (2008-06-06 20:30) [23]> Игорь Шевченко, pavla
источник кода - Delphi World 6. Пробелы вырезал для того, чтобы сообщение уместить на форуме
← →
Игорь Шевченко © (2008-06-06 20:30) [24]PHoeNiX (06.06.08 20:27) [22]
На этой благой ноте дискуссия может быть закончена.
Научись уважать людей и они к тебе тоже станут относиться с уважением.
← →
Игорь Шевченко © (2008-06-06 20:31) [25]
> Пробелы вырезал для того, чтобы сообщение уместить на форуме
так ты еще и гад
← →
PHoeNiX (2008-06-06 20:35) [26]спасибо за оскорбления((
я и без этого отношусь к людям хорошо. Я старался отвечать как можно вежливей, никого не оскорблять и не задевать ничьего самолюбия. Но, увы, в ответ получил кучу оскарблений.
← →
Игорь Шевченко © (2008-06-06 20:39) [27]Изучать до полного просветления:
http://ln.com.ua/~openxs/articles/smart-questions-ru.html
← →
ketmar © (2008-06-06 20:41) [28]>[22] PHoeNiX (2008-06-06 20:27:00)
для того, чтобы увидеть наглого ребёнка, не обязательно смотреть ему в лицо. твои посты говорят сами за себя.
---
All Your Base Are Belong to Us
← →
PHoeNiX (2008-06-06 20:57) [29]известная притча:
...после долгого путешествия странник набрел на слепого отшельника перед городом. подошел к нему и спрашивает: "Здравствуй, Отшельник! Каково мне будет жить в этом городе, какие в нем люди? -А как тебе жилось в прошлом городе? - Плохо, и все люди там плохие. - Ну тогда тебе и здесь плохо тебе будет."
Приходит другой странник в этот же город. -Здравствуй, добрый человек, коково жить в этом городе, какие здесь люди? - А как тебе жилось в старом городе? - Замечательно, и люди там прекрасные. - Ну тогда тебе и здесь будет замечательно"
Вывод: каков человек есть на самом деле, пусть в далекой далекой глубине, так он видит и других. Этим человек пытается закрыть свои недостатки.
Спасибо всем, кто ответил. Я думаю дискуссию можно закрыть. Все равно ничего хорошего дальше не будет.
Я есть такой как есть, и считаю, что судить нехорошо.
И простите все, кому чем то неугодил.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.07.20;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.038 c