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

4 aydır bununla uğraşmaya çalışıyorum haftada en fazla 1 gün ayırabiliyorum Yardımlarınızı bekliyorum

Ynt: Piksel Taraması :) Ekrandaki renklerin piksellerini bulmak yanlışmı sordum :D Gönderen: asimo Tarih: 04 May 2008 13:57:53

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
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
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

kodları açıklarsan güzel olcak

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