Çok Yakında Yeni Bir Arayüzle karşınızdayız! http://yeni.delphican.com/

Hoşgeldin, Ziyaretçi
Sitemizden yararlanabilmek için Kayıt olmalısınız.

Kullanıcı Adınız:
  

Şifreniz:
  





Forumda Ara

(Gelişmiş Arama)

Forum İstatistikleri
» Toplam Üyeler: 2.181
» Son Üye: eskiyuz
» Toplam Konular: 3.960
» Toplam Yorumlar: 32.181

Detaylı İstatistikler

Son Aktiviteler
DbGrid deki Kolon içindek...
Forum: Genel Programlama
Son Yorum:

Esrefhan
9 dakika önce
» Yorumlar: 4
» Okunma: 125
Otomatik çalışmasını sağl...
Forum: Genel Programlama
Son Yorum:

BGNew
12 dakika önce
» Yorumlar: 0
» Okunma: 3
Request Permissions
Forum: Mobil Platform - FireMonkey (FMX)
Son Yorum:

berk06
4 saat önce
» Yorumlar: 2
» Okunma: 43
STM32 ile ilk uygulama
Forum: ST Serisi ARM İşlemciler
Son Yorum:

boreas
5 saat önce
» Yorumlar: 1
» Okunma: 36
IOS Barcode Scanner
Forum: Mobil Platform - FireMonkey (FMX)
Son Yorum:

SimaWB
6 saat önce
» Yorumlar: 3
» Okunma: 77
Form yada panel içinde ta...
Forum: Genel Programlama
Son Yorum:

ozcanm
8 saat önce
» Yorumlar: 2
» Okunma: 50
Güncellenen Kayıt Sayısın...
Forum: FireBird
Son Yorum:

akuyumcu63
9 saat önce
» Yorumlar: 1
» Okunma: 53
IF Nedir, Nasıl Kullanılı...
Forum: Makale
Son Yorum:

SimaWB
Bugün, Saat: 09:23
» Yorumlar: 14
» Okunma: 2.447
E_Fatura arşiv
Forum: Genel Programlama
Son Yorum:

hi_selamlar
Bugün, Saat: 08:49
» Yorumlar: 1
» Okunma: 74
Uygulamada ekran kenarınd...
Forum: Mobil Platform - FireMonkey (FMX)
Son Yorum:

codder71
Bugün, Saat: 00:14
» Yorumlar: 6
» Okunma: 205

 
  Push Notifications
Yazar: ikurt07 - 11-12-2019, Saat: 20:06 - Forum: Mobil Platform - FireMonkey (FMX) - Yorumlar (3)

Arakadaşlar push Notifications uygulamasında aşağıdaki hatanın nedeni nedir

 java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process ... Make sure to call FirebaseApp.initializeApp(Context) first."

Bu konuyu yazdır

  Forumda konuların okunmuş görünmesi
Yazar: wiseman - 11-12-2019, Saat: 15:25 - Forum: Görüş & Öneri ve Yorum - Yorumlar (2)

Selamlar

Son bir kaç gündür, foruma girdiğimde, okumadığım konuların okunmuş gibi gösterimi olduğunu farkettim. Forumda bir sorun mu var bilemedim. Bugün de sadece 1 konuyu okuyup kapadım. Az önce açtığımda sanki 10 konuyu okumuşum gibi işaretlendiğini farkettim. Sizlerde de bu tip bir sorun oluştu mu acaba?

Bu konuyu yazdır

Smile Google Play a uygulama yükleniyor mu?
Yazar: crowlin - 11-12-2019, Saat: 01:36 - Forum: Mobil Platform - FireMonkey (FMX) - Yorumlar (3)

Uzun süredir takip etmiyorum bir oyunum var onu güncellemek ve fmx ile yeni oyunlar yazıp yüklemek istiyorum. En son Play store tarafında 64 bit flan istiyordu sorun vardı şuanda delphi ile uygulama yazsak yükleyebilir miyiz durum nedir bilgisi olan varmı?

Bu konuyu yazdır

  Pro Effect Bileşeni ile fotoğraflara efekt ekleyebilirsiniz..
Yazar: delphicim - 11-12-2019, Saat: 01:13 - Forum: Makale - Yorumlar (3)

Selâmlar,

Bu bileşen sayesinde, fotoğraflar üzerinde onlarca farklı efekt verebiliyorsunuz.


unit ProEffectImage;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ExtCtrls,Math;

type
 TProEffectImage = class(TImage)
 private
   { Private declarations }
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   Procedure Effect_Invert;
   Procedure Effect_AddColorNoise   (Amount:Integer);
   Procedure Effect_AddMonoNoise    (Amount:Integer);
   Procedure Effect_AntiAlias;
   Procedure Effect_Contrast        (Amount:Integer);
   Procedure Effect_FishEye         (Amount:Integer);
   Procedure Effect_GrayScale;
   Procedure Effect_Lightness       (Amount:Integer);
   Procedure Effect_Darkness        (Amount:Integer);
   Procedure Effect_Saturation      (Amount:Integer);
   Procedure Effect_SplitBlur       (Amount:Integer);
   Procedure Effect_GaussianBlur    (Amount:Integer);
   Procedure Effect_Mosaic          (Size:Integer);
   Procedure Effect_Twist           (Amount:Integer);
   procedure Effect_Splitlight      (Amount:integer);
   Procedure Effect_Tile            (Amount: integer);
   Procedure Effect_SpotLight       (Amount: integer; Spot: TRect);
   Procedure Effect_Trace           (Amount: integer);
   Procedure Effect_Emboss;
   Procedure Effect_Solorize        (Amount: integer);
   Procedure Effect_Posterize       (Amount: integer);


   { Published declarations }
 end;

procedure Register;

implementation

{$R DATA.RES}

procedure Register;
begin
 RegisterComponents('Samples', [TProEffectImage]);
end;

procedure PicInvert(src: tbitmap);
var w,h,x,y:integer;
   p:pbytearray;
begin
w:=src.width;
h:=src.height;
src.PixelFormat :=pf24bit;
for y:=0 to h-1 do begin
 p:=src.scanline[y];
 for x:=0 to w-1 do begin
  p[x*3]:= not p[x*3];
  p[x*3+1]:= not p[x*3+1];
  p[x*3+2]:= not p[x*3+2];
  end;
 end;
end;

function IntToByte(i:Integer):Byte;
begin
 if      i>255 then Result:=255
 else if i<0   then Result:=0
 else               Result:=i;
end;

procedure AddColorNoise(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
x,y,r,g,b: Integer;

begin
 for y:=0 to clip.Height-1 do
 begin
   p0:=clip.ScanLine [y];
   for x:=0 to clip.Width-1 do
   begin
     r:=p0[x*3]+(Random(Amount)-(Amount shr 1));
     g:=p0[x*3+1]+(Random(Amount)-(Amount shr 1));
     b:=p0[x*3+2]+(Random(Amount)-(Amount shr 1));
     p0[x*3]:=IntToByte®;
     p0[x*3+1]:=IntToByte(g);
     p0[x*3+2]:=IntToByte(b);
   end;
 end;
end;

procedure AddMonoNoise(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
x,y,a,r,g,b: Integer;
begin
 for y:=0 to clip.Height-1 do
 begin
   p0:=clip.scanline[y];
   for x:=0 to clip.Width-1 do
   begin
     a:=Random(Amount)-(Amount shr 1);
     r:=p0[x*3]+a;
     g:=p0[x*3+1]+a;
     b:=p0[x*3+2]+a;
     p0[x*3]:=IntToByte®;
     p0[x*3+1]:=IntToByte(g);
     p0[x*3+2]:=IntToByte(b);
   end;
 end;
end;

procedure AntiAliasRect(clip: tbitmap; XOrigin, YOrigin,
 XFinal, YFinal: Integer);
var Memo,x,y: Integer; (* Composantes primaires des points environnants *)
   p0,p1,p2:pbytearray;

begin
  if XFinal<XOrigin then begin Memo:=XOrigin; XOrigin:=XFinal; XFinal:=Memo; end;  (* Inversion des valeurs   *)
  if YFinal<YOrigin then begin Memo:=YOrigin; YOrigin:=YFinal; YFinal:=Memo; end;  (* si diff‚rence n‚gative*)
  XOrigin:=max(1,XOrigin);
  YOrigin:=max(1,YOrigin);
  XFinal:=min(clip.width-2,XFinal);
  YFinal:=min(clip.height-2,YFinal);
  clip.PixelFormat :=pf24bit;
  for y:=YOrigin to YFinal do begin
   p0:=clip.ScanLine [y-1];
   p1:=clip.scanline [y];
   p2:=clip.ScanLine [y+1];
   for x:=XOrigin to XFinal do begin
     p1[x*3]:=(p0[x*3]+p2[x*3]+p1[(x-1)*3]+p1[(x+1)*3])div 4;
     p1[x*3+1]:=(p0[x*3+1]+p2[x*3+1]+p1[(x-1)*3+1]+p1[(x+1)*3+1])div 4;
     p1[x*3+2]:=(p0[x*3+2]+p2[x*3+2]+p1[(x-1)*3+2]+p1[(x+1)*3+2])div 4;
     end;
  end;
end;

procedure AntiAlias(clip: tbitmap);
begin
AntiAliasRect(clip,0,0,clip.width,clip.height);
end;

procedure Contrast(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
rg,gg,bg,r,g,b,x,y:  Integer;
begin
 for y:=0 to clip.Height-1 do
 begin
   p0:=clip.scanline[y];
   for x:=0 to clip.Width-1 do
   begin
     r:=p0[x*3];
     g:=p0[x*3+1];
     b:=p0[x*3+2];
     rg:=(Abs(127-r)*Amount)div 255;
     gg:=(Abs(127-g)*Amount)div 255;
     bg:=(Abs(127-b)*Amount)div 255;
     if r>127 then r:=r+rg else r:=r-rg;
     if g>127 then g:=g+gg else g:=g-gg;
     if b>127 then b:=b+bg else b:=b-bg;
     p0[x*3]:=IntToByte®;
     p0[x*3+1]:=IntToByte(g);
     p0[x*3+2]:=IntToByte(b);
   end;
 end;
end;

procedure FishEye(var Bmp, Dst: TBitmap; Amount: Extended);
var
xmid,ymid              : Single;
fx,fy                  : Single;
r1, r2                 : Single;
ifx, ify               : integer;
dx, dy                 : Single;
rmax                   : Single;
ty, tx                 : Integer;
weight_x, weight_y     : array[0..1] of Single;
weight                 : Single;
new_red, new_green     : Integer;
new_blue               : Integer;
total_red, total_green : Single;
total_blue             : Single;
ix, iy                 : Integer;
sli, slo : PByteArray;
begin
 xmid := Bmp.Width/2;
 ymid := Bmp.Height/2;
 rmax := Dst.Width * Amount;

 for ty := 0 to Dst.Height - 1 do begin
   for tx := 0 to Dst.Width - 1 do begin
     dx := tx - xmid;
     dy := ty - ymid;
     r1 := Sqrt(dx * dx + dy * dy);
     if r1 = 0 then begin
       fx := xmid;
       fy := ymid;
     end
     else begin
       r2 := rmax / 2 * (1 / (1 - r1/rmax) - 1);
       fx := dx * r2 / r1 + xmid;
       fy := dy * r2 / r1 + ymid;
     end;
     ify := Trunc(fy);
     ifx := Trunc(fx);
               // Calculate the weights.
     if fy >= 0  then begin
       weight_y[1] := fy - ify;
       weight_y[0] := 1 - weight_y[1];
     end else begin
       weight_y[0] := -(fy - ify);
       weight_y[1] := 1 - weight_y[0];
     end;
     if fx >= 0 then begin
       weight_x[1] := fx - ifx;
       weight_x[0] := 1 - weight_x[1];
     end else begin
       weight_x[0] := -(fx - ifx);
       Weight_x[1] := 1 - weight_x[0];
     end;

     if ifx < 0 then
       ifx := Bmp.Width-1-(-ifx mod Bmp.Width)
     else if ifx > Bmp.Width-1  then
       ifx := ifx mod Bmp.Width;
     if ify < 0 then
       ify := Bmp.Height-1-(-ify mod Bmp.Height)
     else if ify > Bmp.Height-1 then
       ify := ify mod Bmp.Height;

     total_red   := 0.0;
     total_green := 0.0;
     total_blue  := 0.0;
     for ix := 0 to 1 do begin
       for iy := 0 to 1 do begin
         if ify + iy < Bmp.Height then
           sli := Bmp.scanline[ify + iy]
         else
           sli := Bmp.scanline[Bmp.Height - ify - iy];
         if ifx + ix < Bmp.Width then begin
           new_red := sli[(ifx + ix)*3];
           new_green := sli[(ifx + ix)*3+1];
           new_blue := sli[(ifx + ix)*3+2];
         end
         else begin
           new_red := sli[(Bmp.Width - ifx - ix)*3];
           new_green := sli[(Bmp.Width - ifx - ix)*3+1];
           new_blue := sli[(Bmp.Width - ifx - ix)*3+2];
         end;
         weight := weight_x[ix] * weight_y[iy];
         total_red   := total_red   + new_red   * weight;
         total_green := total_green + new_green * weight;
         total_blue  := total_blue  + new_blue  * weight;
       end;
     end;
     slo := Dst.scanline[ty];
     slo[tx*3] := Round(total_red);
     slo[tx*3+1] := Round(total_green);
     slo[tx*3+2] := Round(total_blue);

   end;
 end;
end;

procedure GrayScale(var clip: tbitmap);
var
p0:pbytearray;
Gray,x,y: Integer;
begin
 for y:=0 to clip.Height-1 do
 begin
   p0:=clip.scanline[y];
   for x:=0 to clip.Width-1 do
   begin
     Gray:=Round(p0[x*3]*0.3+p0[x*3+1]*0.59+p0[x*3+2]*0.11);
     p0[x*3]:=Gray;
     p0[x*3+1]:=Gray;
     p0[x*3+2]:=Gray;
   end;
 end;
end;


procedure Lightness(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
r,g,b,x,y: Integer;
begin
 for y:=0 to clip.Height-1 do begin
   p0:=clip.scanline[y];
   for x:=0 to clip.Width-1 do
   begin
     r:=p0[x*3];
     g:=p0[x*3+1];
     b:=p0[x*3+2];
     p0[x*3]:=IntToByte(r+((255-r)*Amount)div 255);
     p0[x*3+1]:=IntToByte(g+((255-g)*Amount)div 255);
     p0[x*3+2]:=IntToByte(b+((255-b)*Amount)div 255);
   end;
 end;
end;

procedure Darkness(var src: tbitmap; Amount: integer);
var
p0:pbytearray;
r,g,b,x,y: Integer;
begin
 src.pixelformat:=pf24bit;
 for y:=0 to src.Height-1 do begin
   p0:=src.scanline[y];
   for x:=0 to src.Width-1 do
   begin
     r:=p0[x*3];
     g:=p0[x*3+1];
     b:=p0[x*3+2];
     p0[x*3]:=IntToByte(r-(®*Amount)div 255);
     p0[x*3+1]:=IntToByte(g-((g)*Amount)div 255);
     p0[x*3+2]:=IntToByte(b-((b)*Amount)div 255);
  end;
 end;
end;


procedure Saturation(var clip: tbitmap; Amount: Integer);
var
p0:pbytearray;
Gray,r,g,b,x,y: Integer;
begin
 for y:=0 to clip.Height-1 do begin
   p0:=clip.scanline[y];
   for x:=0 to clip.Width-1 do
   begin
     r:=p0[x*3];
     g:=p0[x*3+1];
     b:=p0[x*3+2];
     Gray:=(r+g+b)div 3;
     p0[x*3]:=IntToByte(Gray+(((r-Gray)*Amount)div 255));
     p0[x*3+1]:=IntToByte(Gray+(((g-Gray)*Amount)div 255));
     p0[x*3+2]:=IntToByte(Gray+(((b-Gray)*Amount)div 255));
   end;
 end;
end;

procedure SmoothResize(var Src, Dst: TBitmap);
var
x,y,xP,yP,
yP2,xP2:     Integer;
Read,Read2:  PByteArray;
t,z,z2,iz2:  Integer;
pcTongueBytearray;
w1,w2,w3,w4: Integer;
Col1r,col1g,col1b,Col2r,col2g,col2b:   byte;
begin
 xP2:=((src.Width-1)shl 15)div Dst.Width;
 yP2:=((src.Height-1)shl 15)div Dst.Height;
 yP:=0;
 for y:=0 to Dst.Height-1 do
 begin
   xP:=0;
   Read:=src.ScanLine[yP shr 15];
   if yP shr 16<src.Height-1 then
     Read2:=src.ScanLine [yP shr 15+1]
   else
     Read2:=src.ScanLine [yP shr 15];
   pc:=Dst.scanline[y];
   z2:=yP and $7FFF;
   iz2:=$8000-z2;
   for x:=0 to Dst.Width-1 do
   begin
     t:=xP shr 15;
     Col1r:=Read[t*3];
     Col1g:=Read[t*3+1];
     Col1b:=Read[t*3+2];
     Col2r:=Read2[t*3];
     Col2g:=Read2[t*3+1];
     Col2b:=Read2[t*3+2];
     z:=xP and $7FFF;
     w2:=(z*iz2)shr 15;
     w1:=iz2-w2;
     w4:=(z*z2)shr 15;
     w3:=z2-w4;
     pc[x*3+2]:=
       (Col1b*w1+Read[(t+1)*3+2]*w2+
        Col2b*w3+Read2[(t+1)*3+2]*w4)shr 15;
     pc[x*3+1]:=
       (Col1g*w1+Read[(t+1)*3+1]*w2+
        Col2g*w3+Read2[(t+1)*3+1]*w4)shr 15;
     pc[x*3]:=
       (Col1r*w1+Read2[(t+1)*3]*w2+
        Col2r*w3+Read2[(t+1)*3]*w4)shr 15;
     Inc(xP,xP2);
   end;
   Inc(yP,yP2);
 end;
end;

function TrimInt(i, Min, Max: Integer): Integer;
begin
 if      i>Max then Result:=Max
 else if i<Min then Result:=Min
 else               Result:=i;
end;


procedure SmoothRotate(var Src, Dst: TBitmap; cx, cy: Integer;
 Angle: Extended);
type
TFColor  = record b,g,r:Byte end;
var
Top,
Bottom,
Left,
Right,
eww,nsw,
fx,fy,
wx,wy:    Extended;
cAngle,
sAngle:   Double;
xDiff,
yDiff,
ifx,ify,
px,py,
ix,iy,
x,y:      Integer;
nw,ne,
sw,se:    TFColor;
P1,P2,P3Tonguebytearray;
begin
 Angle:=angle;
 Angle:=-Angle*Pi/180;
 sAngle:=Sin(Angle);
 cAngle:=Cos(Angle);
 xDiff:=(Dst.Width-Src.Width)div 2;
 yDiff:=(Dst.Height-Src.Height)div 2;
 for y:=0 to Dst.Height-1 do
 begin
   P3:=Dst.scanline[y];
   py:=2*(y-cy)+1;
   for x:=0 to Dst.Width-1 do
   begin
     px:=2*(x-cx)+1;
     fx:=(((px*cAngle-py*sAngle)-1)/ 2+cx)-xDiff;
     fy:=(((px*sAngle+py*cAngle)-1)/ 2+cy)-yDiff;
     ifx:=Round(fx);
     ify:=Round(fy);

     if(ifx>-1)and(ifx<Src.Width)and(ify>-1)and(ify<Src.Height)then
     begin
       eww:=fx-ifx;
       nsw:=fy-ify;
       iy:=TrimInt(ify+1,0,Src.Height-1);
       ix:=TrimInt(ifx+1,0,Src.Width-1);
       P1:=Src.scanline[ify];
       P2:=Src.scanline[iy];
       nw.r:=P1[ifx*3];
       nw.g:=P1[ifx*3+1];
       nw.b:=P1[ifx*3+2];
       ne.r:=P1[ix*3];
       ne.g:=P1[ix*3+1];
       ne.b:=P1[ix*3+2];
       sw.r:=P2[ifx*3];
       sw.g:=P2[ifx*3+1];
       sw.b:=P2[ifx*3+2];
       se.r:=P2[ix*3];
       se.g:=P2[ix*3+1];
       se.b:=P2[ix*3+2];

       Top:=nw.b+eww*(ne.b-nw.b);
       Bottom:=sw.b+eww*(se.b-sw.b);
       P3[x*3+2]:=IntToByte(Round(Top+nsw*(Bottom-Top)));

       Top:=nw.g+eww*(ne.g-nw.g);
       Bottom:=sw.g+eww*(se.g-sw.g);
       P3[x*3+1]:=IntToByte(Round(Top+nsw*(Bottom-Top)));

       Top:=nw.r+eww*(ne.r-nw.r);
       Bottom:=sw.r+eww*(se.r-sw.r);
       P3[x*3]:=IntToByte(Round(Top+nsw*(Bottom-Top)));
     end;
   end;
 end;
end;


procedure SplitBlur(var clip: tbitmap; Amount: integer);
var
p0,p1,p2:pbytearray;
cx,x,y: Integer;
Buf:   array[0..3,0..2]of byte;
begin
 if Amount=0 then Exit;
 for y:=0 to clip.Height-1 do
 begin
   p0:=clip.scanline[y];
   if y-Amount<0         then p1:=clip.scanline[y]
   else {y-Amount>0}          p1:=clip.ScanLine[y-Amount];
   if y+Amount<clip.Height    then p2:=clip.ScanLine[y+Amount]
   else {y+Amount>=Height}    p2:=clip.ScanLine[clip.Height-y];

   for x:=0 to clip.Width-1 do
   begin
     if x-Amount<0     then cx:=x
     else {x-Amount>0}      cx:=x-Amount;
     Buf[0,0]:=p1[cx*3];
     Buf[0,1]:=p1[cx*3+1];
     Buf[0,2]:=p1[cx*3+2];
     Buf[1,0]:=p2[cx*3];
     Buf[1,1]:=p2[cx*3+1];
     Buf[1,2]:=p2[cx*3+2];
     if x+Amount<clip.Width     then cx:=x+Amount
     else {x+Amount>=Width}     cx:=clip.Width-x;
     Buf[2,0]:=p1[cx*3];
     Buf[2,1]:=p1[cx*3+1];
     Buf[2,2]:=p1[cx*3+2];
     Buf[3,0]:=p2[cx*3];
     Buf[3,1]:=p2[cx*3+1];
     Buf[3,2]:=p2[cx*3+2];
     p0[x*3]:=(Buf[0,0]+Buf[1,0]+Buf[2,0]+Buf[3,0])shr 2;
     p0[x*3+1]:=(Buf[0,1]+Buf[1,1]+Buf[2,1]+Buf[3,1])shr 2;
     p0[x*3+2]:=(Buf[0,2]+Buf[1,2]+Buf[2,2]+Buf[3,2])shr 2;
   end;
 end;
end;

procedure GaussianBlur(var clip: tbitmap; Amount: integer);
var
i: Integer;
begin
 for i:=Amount downto 0 do
 SplitBlur(clip,3);
end;

procedure Mosaic(var Bm:TBitmap;size:Integer);
var
  x,y,i,j:integer;
  p1,p2:pbytearray;
  r,g,b:byte;
begin
 y:=0;
 repeat
   p1:=bm.scanline[y];
   x:=0;
   repeat
     j:=1;
     repeat
     p2:=bm.scanline[y];
     x:=0;
     repeat
       r:=p1[x*3];
       g:=p1[x*3+1];
       b:=p1[x*3+2];
       i:=1;
      repeat
      p2[x*3]:=r;
      p2[x*3+1]:=g;
      p2[x*3+2]:=b;
      inc(x);
      inc(i);
      until (x>=bm.width) or (i>size);
     until x>=bm.width;
     inc(j);
     inc(y);
     until (y>=bm.height) or (j>size);
   until (y>=bm.height) or (x>=bm.width);
 until y>=bm.height;
end;


procedure Twist(var Bmp, Dst: TBitmap; Amount: integer);
var
 fxmid, fymid : Single;
 txmid, tymid : Single;
 fx,fy : Single;
 tx2, ty2 : Single;
 r : Single;
 theta : Single;
 ifx, ify : integer;
 dx, dy : Single;
 OFFSET : Single;
 ty, tx             : Integer;
 weight_x, weight_y     : array[0..1] of Single;
 weight                 : Single;
 new_red, new_green     : Integer;
 new_blue               : Integer;
 total_red, total_green : Single;
 total_blue             : Single;
 ix, iy                 : Integer;
 sli, slo : PBytearray;

 function ArcTan2(xt,yt : Single): Single;
 begin
   if xt = 0 then
     if yt > 0 then
       Result := Pi/2
     else
       Result := -(Pi/2)
   else begin
     Result := ArcTan(yt/xt);
     if xt < 0 then
       Result := Pi + ArcTan(yt/xt);
   end;
 end;

begin
 OFFSET := -(Pi/2);
 dx := Bmp.Width - 1;
 dy := Bmp.Height - 1;
 r := Sqrt(dx * dx + dy * dy);
 tx2 := r;
 ty2 := r;
 txmid := (Bmp.Width-1)/2;    //Adjust these to move center of rotation
 tymid := (Bmp.Height-1)/2;   //Adjust these to move ......
 fxmid := (Bmp.Width-1)/2;
 fymid := (Bmp.Height-1)/2;
 if tx2 >= Bmp.Width then tx2 := Bmp.Width-1;
 if ty2 >= Bmp.Height then ty2 := Bmp.Height-1;

 for ty := 0 to Round(ty2) do begin
   for tx := 0 to Round(tx2) do begin
     dx := tx - txmid;
     dy := ty - tymid;
     r := Sqrt(dx * dx + dy * dy);
     if r = 0 then begin
       fx := 0;
       fy := 0;
     end
     else begin
       theta := ArcTan2(dx,dy) - r/Amount - OFFSET;
       fx := r * Cos(theta);
       fy := r * Sin(theta);
     end;
     fx := fx + fxmid;
     fy := fy + fymid;

     ify := Trunc(fy);
     ifx := Trunc(fx);
               // Calculate the weights.
     if fy >= 0  then begin
       weight_y[1] := fy - ify;
       weight_y[0] := 1 - weight_y[1];
     end else begin
       weight_y[0] := -(fy - ify);
       weight_y[1] := 1 - weight_y[0];
     end;
     if fx >= 0 then begin
       weight_x[1] := fx - ifx;
       weight_x[0] := 1 - weight_x[1];
     end else begin
       weight_x[0] := -(fx - ifx);
       Weight_x[1] := 1 - weight_x[0];
     end;

     if ifx < 0 then
       ifx := Bmp.Width-1-(-ifx mod Bmp.Width)
     else if ifx > Bmp.Width-1  then
       ifx := ifx mod Bmp.Width;
     if ify < 0 then
       ify := Bmp.Height-1-(-ify mod Bmp.Height)
     else if ify > Bmp.Height-1 then
       ify := ify mod Bmp.Height;

     total_red   := 0.0;
     total_green := 0.0;
     total_blue  := 0.0;
     for ix := 0 to 1 do begin
       for iy := 0 to 1 do begin
         if ify + iy < Bmp.Height then
           sli := Bmp.scanline[ify + iy]
         else
           sli := Bmp.scanline[Bmp.Height - ify - iy];
         if ifx + ix < Bmp.Width then begin
           new_red := sli[(ifx + ix)*3];
           new_green := sli[(ifx + ix)*3+1];
           new_blue := sli[(ifx + ix)*3+2];
         end
         else begin
           new_red := sli[(Bmp.Width - ifx - ix)*3];
           new_green := sli[(Bmp.Width - ifx - ix)*3+1];
           new_blue := sli[(Bmp.Width - ifx - ix)*3+2];
         end;
         weight := weight_x[ix] * weight_y[iy];
         total_red   := total_red   + new_red   * weight;
         total_green := total_green + new_green * weight;
         total_blue  := total_blue  + new_blue  * weight;
       end;
     end;
     slo := Dst.scanline[ty];
     slo[tx*3] := Round(total_red);
     slo[tx*3+1] := Round(total_green);
     slo[tx*3+2] := Round(total_blue);
   end;
 end;
end;

Procedure Splitlight (var clip:tbitmap;amount:integer);
var x,y,i:integer;
   p1:pbytearray;

   function sinpixs(a:integer):integer;
   begin
   result:=variant(sin(a/255*pi/2)*255);
   end;
begin
for i:=1 to amount do
 for y:=0 to clip.height-1 do begin
   p1:=clip.scanline[y];
   for x:=0 to clip.width-1 do begin
     p1[x*3]:=sinpixs(p1[x*3]);
     p1[x*3+1]:=sinpixs(p1[x*3+1]);
     p1[x*3+2]:=sinpixs(p1[x*3+2]);
     end;
   end;
end;


procedure Tile(src, dst: TBitmap; amount: integer);
var w,h,w2,h2,i,j:integer;
   bm:tbitmap;
begin
 w:=src.width;
 h:=src.height;
 dst.width:=w;
 dst.height:=h;
 dst.Canvas.draw(0,0,src);
 if (amount<=0) or ((w div amount)<5)or ((h div amount)<5) then exit;
 h2:=h div amount;
 w2:=w div amount;
 bm:=tbitmap.create;
 bm.width:=w2;
 bm.height:=h2;
 bm.PixelFormat :=pf24bit;
 smoothresize(src,bm);
 for j:=0 to amount-1 do
  for i:=0 to amount-1 do
    dst.canvas.Draw (i*w2,j*h2,bm);
 bm.free;
end;

procedure SpotLight (var src: Tbitmap; Amount: integer; Spot: TRect);
var bm:tbitmap;
   w,h:integer;
begin
Darkness(src,amount);
w:=src.Width;
h:=src.Height ;
bm:=tbitmap.create;
bm.width:=w;
bm.height:=h;
bm.canvas.Brush.color:=clblack;
bm.canvas.FillRect (rect(0,0,w,h));
bm.canvas.brush.Color :=clwhite;
bm.canvas.Ellipse (Spot.left,spot.top,spot.right,spot.bottom);
bm.transparent:=true;
bm.TransparentColor :=clwhite;
src.Canvas.Draw (0,0,bm);
bm.free;
end;


procedure Trace (src:Tbitmap;intensity:integer);
var
 x,y,i : integer;
 P1,P2,P3,P4 : PByteArray;
 tb,TraceB:byte;
 hasb:boolean;
 bitmap:tbitmap;
begin
 bitmap:=tbitmap.create;
 bitmap.width:=src.width;
 bitmap.height:=src.height;
 bitmap.canvas.draw(0,0,src);
 bitmap.PixelFormat :=pf8bit;
 src.PixelFormat :=pf24bit;
 hasb:=false;
 TraceB:=$00;
 for i:=1 to Intensity do begin
   for y := 0 to BitMap.height -2 do begin
     P1 := BitMap.ScanLine[y];
     P2 := BitMap.scanline[y+1];
     P3 := src.scanline[y];
     P4 := src.scanline[y+1];
     x:=0;
     repeat
       if p1[x]<>p1[x+1] then begin
          if not hasb then begin
            tb:=p1[x+1];
            hasb:=true;
            p3[x*3]:=TraceB;
            p3[x*3+1]:=TraceB;
            p3[x*3+2]:=TraceB;
            end
            else begin
            if p1[x]<>tb then
                begin
                p3[x*3]:=TraceB;
                p3[x*3+1]:=TraceB;
                p3[x*3+2]:=TraceB;
                end
              else
                begin
                p3[(x+1)*3]:=TraceB;
                p3[(x+1)*3+1]:=TraceB;
                p3[(x+1)*3+1]:=TraceB;
                end;
            end;
          end;
       if p1[x]<>p2[x] then begin
          if not hasb then begin
            tb:=p2[x];
            hasb:=true;
            p3[x*3]:=TraceB;
            p3[x*3+1]:=TraceB;
            p3[x*3+2]:=TraceB;
            end
            else begin
            if p1[x]<>tb then
                begin
                p3[x*3]:=TraceB;
                p3[x*3+1]:=TraceB;
                p3[x*3+2]:=TraceB;
                end
              else
                begin
                p4[x*3]:=TraceB;
                p4[x*3+1]:=TraceB;
                p4[x*3+2]:=TraceB;
                end;
            end;
          end;
     inc(x);
     until x>=(BitMap.width -2);
   end;
   if i>1 then
   for y := BitMap.height -1 downto 1 do begin
     P1 := BitMap.ScanLine[y];
     P2 := BitMap.scanline[y-1];
     P3 := src.scanline[y];
     P4 := src.scanline [y-1];
     x:=Bitmap.width-1;
     repeat
       if p1[x]<>p1[x-1] then begin
          if not hasb then begin
            tb:=p1[x-1];
            hasb:=true;
            p3[x*3]:=TraceB;
            p3[x*3+1]:=TraceB;
            p3[x*3+2]:=TraceB;
            end
            else begin
            if p1[x]<>tb then
                begin
                p3[x*3]:=TraceB;
                p3[x*3+1]:=TraceB;
                p3[x*3+2]:=TraceB;
                end
              else
                begin
                p3[(x-1)*3]:=TraceB;
                p3[(x-1)*3+1]:=TraceB;
                p3[(x-1)*3+2]:=TraceB;
                end;
            end;
          end;
       if p1[x]<>p2[x] then begin
          if not hasb then begin
            tb:=p2[x];
            hasb:=true;
            p3[x*3]:=TraceB;
            p3[x*3+1]:=TraceB;
            p3[x*3+2]:=TraceB;
            end
            else begin
            if p1[x]<>tb then
                begin
                p3[x*3]:=TraceB;
                p3[x*3+1]:=TraceB;
                p3[x*3+2]:=TraceB;
                end
              else
                begin
                p4[x*3]:=TraceB;
                p4[x*3+1]:=TraceB;
                p4[x*3+2]:=TraceB;
                end;
            end;
          end;
     dec(x);
     until x<=1;
   end;
 end;
bitmap.free;
end;


procedure Emboss(var Bmp:TBitmap);
var
x,y:   Integer;
p1,p2: Pbytearray;
begin
 for y:=0 to Bmp.Height-2 do
 begin
   p1:=bmp.scanline[y];
   p2:=bmp.scanline[y+1];
   for x:=0 to Bmp.Width-4 do
   begin
     p1[x*3]:=(p1[x*3]+(p2[(x+3)*3] xor $FF))shr 1;
     p1[x*3+1]:=(p1[x*3+1]+(p2[(x+3)*3+1] xor $FF))shr 1;
     p1[x*3+2]:=(p1[x*3+2]+(p2[(x+3)*3+2] xor $FF))shr 1;
   end;
 end;

end;


procedure Solorize(src, dst: tbitmap; amount: integer);
var w,h,x,y:integer;
   ps,pd:pbytearray;
   c:integer;
begin
 w:=src.width;
 h:=src.height;
 src.PixelFormat :=pf24bit;
 dst.PixelFormat :=pf24bit;
 for y:=0 to h-1 do begin
  ps:=src.scanline[y];
  pd:=dst.scanline[y];
  for x:=0 to w-1 do begin
   c:=(ps[x*3]+ps[x*3+1]+ps[x*3+2]) div 3;
   if c>amount then begin
    pd[x*3]:= 255-ps[x*3];
    pd[x*3+1]:=255-ps[x*3+1];
    pd[x*3+2]:=255-ps[x*3+2];
    end
    else begin
    pd[x*3]:=ps[x*3];
    pd[x*3+1]:=ps[x*3+1];
    pd[x*3+2]:=ps[x*3+2];
    end;
   end;
  end;
end;

procedure Posterize(src, dst: tbitmap; amount: integer);
var w,h,x,y:integer;
   ps,pd:pbytearray;
   c:integer;
begin
 w:=src.width;
 h:=src.height;
 src.PixelFormat :=pf24bit;
 dst.PixelFormat :=pf24bit;
 for y:=0 to h-1 do begin
  ps:=src.scanline[y];
  pd:=dst.scanline[y];
  for x:=0 to w-1 do begin
    pd[x*3]:= round(ps[x*3]/amount)*amount;
    pd[x*3+1]:=round(ps[x*3+1]/amount)*amount;
    pd[x*3+2]:=round(ps[x*3+2]/amount)*amount;
   end;
  end;
end;


//----------------------
//-------------------------
//----------------------

procedure TProEffectImage.Effect_Invert;
Begin
PicInvert (Picture.Bitmap);
Invalidate;
end;

Procedure TProEffectImage.Effect_AddColorNoise (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
AddColorNoise (bb,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_AddMonoNoise (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
AddMonoNoise (bb,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

procedure TProEffectImage.Effect_AntiAlias;
Begin
AntiAlias (Picture.Bitmap);
Invalidate;
end;

Procedure TProEffectImage.Effect_Contrast (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
Contrast (bb,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_FishEye (Amount:Integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
FishEye (BB1,BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_GrayScale;
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
GrayScale (BB);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_Lightness (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
Lightness (BB,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_Darkness (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
Darkness (BB,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_Saturation (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
Saturation (BB,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_SplitBlur (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
SplitBlur (BB,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_GaussianBlur (Amount:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
GaussianBlur (BB,Amount);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_Mosaic (Size:Integer);
Var BB:TBitmap;
Begin
BB := TBitmap.Create;
BB.PixelFormat := pf24bit;
BB.Assign (Picture.Bitmap);
Mosaic (BB,Size);
Picture.Bitmap.Assign (BB);
BB.Free;
end;

Procedure TProEffectImage.Effect_Twist (Amount:Integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Twist (BB1,BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_Trace (Amount: integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Trace (BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

procedure TProEffectImage.Effect_Splitlight (Amount:integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Splitlight (BB1,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_Tile (Amount: integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Tile (BB1,BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_SpotLight (Amount: integer; Spot: TRect);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
SpotLight (BB2,Amount,Spot);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_Emboss;
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Emboss (BB2);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;

Procedure TProEffectImage.Effect_Solorize (Amount: integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Solorize (BB1,BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;


Procedure TProEffectImage.Effect_Posterize (Amount: integer);
Var BB1,BB2:TBitmap;
Begin
BB1 := TBitmap.Create;
BB1.PixelFormat := pf24bit;
BB1.Assign (Picture.Bitmap);
BB2 := TBitmap.Create;
BB2.PixelFormat := pf24bit;
BB2.Assign (BB1);
Posterize (BB1,BB2,Amount);
Picture.Bitmap.Assign (BB2);
BB1.Free;
BB2.Free;
end;




end.


Bileşen ve örnek proje ekte..

İyi çalışmalar.



Ek Dosyalar
.zip   ProEffectImage.zip (Dosya Boyutu: 311,81 KB / İndirme Sayısı: 18)
Bu konuyu yazdır

Question Fast Report Şartlı Kdv Tutarı aldırma
Yazar: delphicim - 11-12-2019, Saat: 00:36 - Forum: Genel Programlama - Yorumlar (3)

Selâmlar,

Fast report 5 te, tablodaki kdvorani alanında sadece 18 verisi olan satırların UrunTutari nin toplamını nasıl aldırabilirim?

Kod:
[SUM(<Fatura."UrunTutari">, DetailData1)]


Teşekkürler,

Bu konuyu yazdır

  Master-Detail Raporlama
Yazar: apachi2006 - 09-12-2019, Saat: 20:59 - Forum: Genel Programlama - Yorumlar (14)

Herkese kolay gelsin. Fast reportta Master Detail  ilişkisinde takıldım. Cari hesapları ve Satışlar adında 2 tane tablomuz var. Sorguladığımız zaman cari hesapları tablosundaki islemkodu alanı ile satıs tablosundaki işlem alanı eşleşerek raporda master ve detail bantlara veri aktarıyorum ancak, carihesap tablosunda olup ta satış tablosunda olmayan bilgiler detail tablosunda görünmüyor veya carihesaplarda bulunan satırların altına tüm satış tablosundaki bilgileri ekliyor. Bu konuda bilgisi olan varmı? İyi çalışmalar.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. 

rapor_cikti.png

Bu konuyu yazdır

  Uyku modunu" önleme -
Yazar: ikurt07 - 09-12-2019, Saat: 16:12 - Forum: Mobil Platform - FireMonkey (FMX) - Yorumlar (3)

herkese selam 
 cihazın Uyku Modunu  nasıl kontrol edebiliriz .

Bu konuyu yazdır

  MySQL 8.0 Windows x86 (32Bit) Sürümü Download
Yazar: hi_selamlar - 09-12-2019, Saat: 14:30 - Forum: MySQL - Yorumlar (9)

Merhabalar,

MySQL 8.0 sürümünü Windows 7 SP1 x86 (32bit) kurulum yapamadım.
Biraz araştırma yaptım fakat bir sonuca ulaşamadım.

Acaba MySQL 8.0 x86 (32bit) sürümünü indirmek için link mevcutmu?
Windows 7 SP1 x86 (32bit) sürümüne kurulum yapabilen oldu mu acaba?

Takıldım, programı bir türlü kuramadım.

NOT!
Normal paketini indirip kurmaya çalıştığınızda; "Paket içeriğinde x86 (32bit) uygulaması yoktur." uyarısı veriyor. Sad

Teşekkürler.

Bu konuyu yazdır

  Twebbrowser kullanmadan indy veya türevi bir bileşene js ve ajax ı kullanmak mümkünmü
Yazar: Ahmet İPEKÇİ - 08-12-2019, Saat: 17:35 - Forum: Genel Programlama - Yorumlar (10)

Herkese çok selamlar. Twebbrowser kullanmadan indy veya türevi bir bileşen ile js ve ajax ı kullanmak mümkünmü acaba. Yöntem ne olmalı veya Ücretli bir bileşende olabilir.

Bu konuyu yazdır

Photo TIVA TM4C123G ile LED YAK SÖNDÜR
Yazar: guverdik - 08-12-2019, Saat: 14:39 - Forum: TIVA Serisi ARM İşlemciler - Yorumlar (3)

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. isimli makalemizin hemen devamı olan bu konumuzda LED YAK SÖNDÜR TIVA örneğimizi ele alacağız. Bu anlatacağımız konular bundan sonraki hemen hemen tüm TIVA elektronik kodlama işlemlerinde temel olacaktır. Yani ARM programlama başlıyor.  Smile

TIVA yı aşağıda resmi görülen ALTLIK ile birlikte kodlama yapıp dış dünya ile konnektörlerindeki vidalar ile bağlantılarını saatçi tornavidasını kullanarak yapacağız. Bu altlıkta DIŞ dünyaya çıkartılmış 35 Adet AKTİF PIN vardır. isimleri ALTLIK taki plaket üzerinde F1, F2 gibi yazılarla PORT ve PIN isimleri belirtilmiş ayrıca GND ile de TIVA'nın EKSİ uçları çeşitli konnektörlerden dış dünyaya çıkartılmıştır. Kısaca bizim ELEKTRONİK (ROBOTİK) KODLAMA alt yapımızda bu KART'ımızı (kod adı USCO-01) kullanacağız.

   

ARM KEIL proje yöneticisinden, hello.c dosyasını SOL taraftaki pencereden çift tıklayarak EDITOR penceresinde açalım. ilk 1-24 satırlar proje ile alakalı bilgilendirme ve yasal yayın hakları bilgilendirmeleri vardır. Bu HELLO "Merhaba Dünya" projesi TIVA kartımızdaki MAVİ LED'i 1 sn süre ile YAKIP, 1 sn süre ile SÖNDÜRME işlemini yapar. Aynı zaman da her RESET düğmesine basıldığında da, USB kablosu üzerinden MCU'dan PC'ye doğru "Helloi World" yazısını gönderir ve hemen arkasından MAVİ LED'i birer saniye aralıklarla yakıp söndürür.

Arkadaşlar ARM programlama da hangi proje olursa olsun size tavsiyem okuma yorumlama işlemine İLK satırlardan devam eden satırlara doğru okumaya veya anlamaya çalışmayın. PROJE yöneticisindeki (Sol Pencere) sekmelerden {}Function sekmesini açarak projeye DAHİL olan DOSYA lardaki methodları (procedure veya fonksiyon) açarak ilk çalıştırılacak olan main (void) metodundan itibaren okumaya - anlamaya başlayınız.

   

Karşımıza gelen ilk komuttan itibaren kodlamayı anlamaya çalışalım.

// MCU içinde REAL sayılarla ondalıklı (virgüllü) işlemler yapmaya izin ver.
ROM_FPULazyStackingEnable();  

// Ana kristal kullanılarak PLL ile 200 MHz üret. Sonra bu 200 MHz'i 4' böl. MCU'yu 50 MHz de çalıştır.
ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);

// TIVA kartının üzerinde bulanan kullanıcı LED'lerini GİRİŞ/ÇIKIŞ işlemleri için KULLAN. Burada F Portu seçildi.
// F1,F2,F3 USCO-01 altlık kartımızda DIGITAL OUTPUT kategorisinde konnetörü ile birlikte çıkartılmıştır.
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

// F portuna ait 2.PIN'i ÇIKIŞ olarak AKTİF et. GPIO = Generel Pupose Input Output demektir. Genel amaçlı giriş çıkış.
ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);

// UART ayarlarını gerçekleştir. Bu adımdan sonra İNCELEMEYE-ANLAMAYA hemen UART metoduna giderek devam ediniz. Çünkü MCU da böyle yapacak. Makale olarak yazdığımız için UART metodunu MAIN metodundan önce yazmamız gerekirdi. Ama hiyerarşiyi bozmamak adına UART metodunu aşağıda yazmaya devam edeceğim.
ConfigureUART();

void ConfigureUART(void) 
{
   // UART (Seri Port işlemleri) kullanılacak PORT'u SEÇ
   ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

   // UART0'ı SEÇ (0'dan 7'ye kadar 8 adet var..
   ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

   // UART0 için Receive ve Transmit (RX, TX) PORT VE PIN'leri NE OLSUN?
   ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
   ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
   ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

   // Ana osilatör olan 16 MHz kristali kullan. PUTTY terminal yazılımı ile 115200 Baud ve 8N1 ayarları ile PC ye bağlan.
   UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

   UARTStdioConfig(0, 115200, 16000000);
}

 // MCU'dan PC'ye "Merhaba Dünya" bilgisini gönder ..
 UARTprintf("Hello, world!\n");

  // Sonsuz döngüyü başlatma komutu ..
  while(1) 
    
  // Sonsuz döngü BLOK başı..
  {
        // MAVİ LED'i yak
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);

        // Bir BIT bekle (50.000.000 / 10 / 3) 
        SysCtlDelay(SysCtlClockGet() / 10 / 3);

        // MAVİ LED'i söndür
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);

        // Bir BIT bekle (50.000.000 / 10 / 3) 
        SysCtlDelay(SysCtlClockGet() / 10 / 3);
  
  // Sonsuz döngü BLOK sonu..
  }

Böylece LED YAK SÖNDÜR uygulamasını anlamaya yorumlamaya çalıştık.


25 ve 36. satırlar arasında ise projeye dahil (include) edilen kütüphanelerin listesini verelim. Bu liste hemen hemen tüm uygulamalarda standart olarak kullanılır.

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"



Son olarak tüm KODLAMA nın tamamını verelim.

Kod:
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"

//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
}
#endif

void ConfigureUART(void)
{
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
  ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
  ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
  ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
  UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
  UARTStdioConfig(0, 115200, 16000000);
}

int main(void)
{
  ROM_FPULazyStackingEnable();
  ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
  ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
  ROM_GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_2);

  ConfigureUART();

  UARTprintf("Hello, world!\n");

  while(1)
  {
      GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_2);
      SysCtlDelay(SysCtlClockGet() / 10 / 3);
      GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);
      SysCtlDelay(SysCtlClockGet() / 10 / 3);
  }
}

Bu konuyu yazdır