Arşiv Anasayfa Delphi Soruları
Sayfalar: 1
Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: cLaW Tarih: 04 May 2008 12:24:36
o anki görüntüyü alıp mesela görüntüdeki yeşil rengi bulup hangi pikselde olduğunu daha doğrusu ekranın hangi piksellerinde olduğunu bulan bir şey lazım değerli delphidunyası sakinleri

Smile 4 aydır bununla uğraşmaya çalışıyorum haftada en fazla 1 gün ayırabiliyorum Yardımlarınızı bekliyorum Smile
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: asimo Tarih: 04 May 2008 13:57:53
Smile

Bu kolay !

Peki şu windows renk paletinden kurtulup kendi renk paletimizi yerine koyabilmenin mantığı nedir , copy-paste bilgilerin dışında ...
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: cLaW Tarih: 04 May 2008 15:30:46
Bu kolay derken benim sorununamı yoksa altına yazdığın senin sorununamı kolay diyosun değerli asimocum
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: asimo Tarih: 04 May 2008 15:56:09
Smile

Tabii ki , senin sorunun için diyorum ...

Yeşil rengi bulmak bu kadar da zor olmasa gerek !!!

RGB (red , green , blue) //Canvas icin ;

Örnek için ;

Form 'a bir adet timer nesnesi ekle , süreyi dilediğin gibi tayin et ve şu kodu yaz.

procedure TForm1.Timer1Timer(Sender: TObject);
{$J+}
const i : Integer = 0;

begin
if i < 255 then i := i + 1 else i := 0;
 form1.Color := rgb ( 0 , i , 0);
end;

Yeşilin nasıl bulunabileceğini anladın mı ?

Kolay gelsin ...
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: dameon Tarih: 04 May 2008 18:55:07
@Asimo , copy-paste olacak ama belki işine yarar diye düşündüm :

Renk Paletlerinin yaratılması ve kullanımı
Delphi uygulamasında çizim yapılırken, gereken paletin yaratılması ve kullanılması nasıl olur?
Eğer palet değiştirme yolu ile animasyon yapılacaksa, en az 256 renk modunda çalışılmalı ve, aşağıdaki kod örneğinde geçen bütün PC_NOCOLLAPSE değerleri PC_RESERVED olarak değiştirilmelidir.
Palet yaratmanın yanı sıra, yapılması gereken diğer işlemler de şunlardır.
1. Formun GetPalette davranışı,yeni paleti döndürecek şekilde değiştirilmelidir.
2. Boyamaya başlamadan hemen önce, yeni palet seçilmelidir.
OldPal := SelectPalette(Canvas.Handle, NewPalette, False);
RealizePalette(Canvas.Handle);
SelectPalette(Canvas.Handle, OldPal, False);
3. İşlem tamamlandıktan sonra palet yok edilmelidir.
4. Renk değeri almak için, RGB fonksiyonu yerine PaletteRGB fonksiyonu kullanılmalıdır.
function CreateIdentityPalette(const aRGB; nColors : Integer) : HPALETTE;
type
QA = Array[0..255] of TRGBQUAD;
var
Palette : PLOGPALETTE;
PalSize : Word;
ScreenDC : HDC;
I : Integer;
nStaticColors : Integer;
nUsableColors : Integer;
begin
PalSize := SizeOf(TLOGPALETTE) + SizeOf(TPALETTEENTRY) * 256;
GetMem(Palette, PalSize);
try
with Palette^ do
begin
palVersion := $0300;
palNumEntries := 256;
ScreenDC := GetDC(0);
try
if (GetSystemPaletteUse(ScreenDC) = SYSPAL_NOSTATIC)
then
begin
{$R-}
for i := 0 to (nColors-1) do
with palPalEntry, QA(aRGB) do
begin
peRed := rgbRed;
peGreen := rgbGreen;
peBlue := rgbBlue;
peFlags := PC_NOCOLLAPSE;
end;
for i := nColors to 255 do
palPalEntry.peFlags := PC_NOCOLLAPSE;
I := 255;
with palPalEntry do
begin
peRed := 255;
peGreen := 255;
peBlue := 255;
peFlags := 0;
end;
with palPalEntry[0] do
begin
peRed := 0;
peGreen := 0;
peBlue := 0;
peFlags := 0;
end;
{$R+}
end
else
begin
nStaticColors := GetDeviceCaps(ScreenDC, NUMRESERVED);
GetSystemPaletteEntries(ScreenDC, 0, 256, palPalEntry);
{$R-}
nStaticColors := nStaticColors shr 1;
for i:= 0 to (nStaticColors-1) do
palPalEntry.peFlags := 0;

nUsableColors := nColors - nStaticColors;
for I := nStaticColors to (nUsableColors-1) do
with palPalEntry, QA(aRGB) do
begin
peRed := rgbRed;
peGreen := rgbGreen;
peBlue := rgbBlue;
peFlags := PC_NOCOLLAPSE;
end;
for i := nUsableColors to (255-nStaticColors) do
palPalEntry.peFlags := PC_NOCOLLAPSE;

for i := (256 - nStaticColors) to 255 do
palPalEntry.peFlags := 0;
end;
finally
ReleaseDC(0, ScreenDC);
end;
end;
Result := CreatePalette(Palette^);
finally
FreeMem(Palette, PalSize);
end;
end;

procedure ClearSystemPalette;
var
Palette : PLOGPALETTE;
PalSize : Word;
ScreenDC : HDC;
I : Word;
const
ScreenPal : HPALETTE = 0;
begin
PalSize := SizeOf(TLOGPALETTE) + SizeOf(TPALETTEENTRY) * 255;
GetMem(Palette, PalSize);
try
FillChar(Palette^, PalSize, 0);
Palette^.palVersion := $0300;
Palette^.palNumEntries := 256;
{$R-}
For I := 0 to 255 do
With Palette^.palPalEntry do
peFlags := PC_NOCOLLAPSE;
{$R+}
ScreenDC := GetDC(0);
try
ScreenPal := CreatePalette(Palette^);
if ScreenPal <> 0
then
begin
ScreenPal := SelectPalette(ScreenDC,ScreenPal,FALSE);
RealizePalette(ScreenDC);
ScreenPal := SelectPalette(ScreenDC,ScreenPal,FALSE);
DeleteObject(ScreenPal);
end;
finally
ReleaseDC(0, ScreenDC);
end;
finally
FreeMem(Palette, PalSize);
end;
end;


Ayrıca şu adreste Paletler hakkında tonlarca bilgi var , tabii ki ingilizcen iyiyse...

http://efg2.com/Lab/Library/Delphi/Graphics/Color.htm
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: cLaW Tarih: 09 May 2008 01:53:36
Smile

Tabii ki , senin sorunun için diyorum ...

Yeşil rengi bulmak bu kadar da zor olmasa gerek !!!

RGB (red , green , blue) //Canvas icin ;

Örnek için ;

Form 'a bir adet timer nesnesi ekle , süreyi dilediğin gibi tayin et ve şu kodu yaz.

procedure TForm1.Timer1Timer(Sender: TObject);
{$J+}
const i : Integer = 0;

begin
if i < 255 then i := i + 1 else i := 0;
 form1.Color := rgb ( 0 , i , 0);
end;

Yeşilin nasıl bulunabileceğini anladın mı ?

Kolay gelsin ...

anlamadım Very Happy kodları açıklarsan güzel olcak Smile
Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum Gönderen: cyclone Tarih: 11 May 2008 09:15:56
Dostum sanirim istedigin tam olarak boyle bisey.

Dosyayi ekledim ilisikteki adresten bulabilirsin.
Ayrica hakkinda soylemem gereken bana ait deil delphiye henuz yeni basladim ucretsiz kod paylasimi yapan sitelerin birinden indirmistim.
Kolay gelsin

http://www.cpaylas.com/973856