/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Farver
Fra : Henning Madsen


Dato : 27-12-06 20:39

På en form plaserer jeg en Image og derpå et BMP billed
med
Edit1.Text := IntToStr(Image1.Canvas.Pixels[X,Y]);
udlæser jeg billed farverne.

Dette er ok med BMP filer, men ikke med JPG filer

Er det mugligt, vel en løsning være velkommen

MVH
Henning



 
 
Flozzy (30-12-2006)
Kommentar
Fra : Flozzy


Dato : 30-12-06 05:24

Hej Henning
Prøv evt. det her:

//Globale variable
var PixCol: TColor;
ScreenDC: HWND;

// I Formens OnCreate event
ScreenDC := GetDC(0);

// I Formens OnClose event
ReleaseDC(Form1.Handle,ScreenDC);

// og brug Image1's OnMouseMove event
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
PixCol := GetPixel(ScreenDC, X, Y);
Edit1.Text := '$00' + IntToHex(Integer(PixCol), 6);
end;

Det burde virke. Godt Nytår til alle!

Mvh. Flozzy

"Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
news:4592ca58$0$192$edfadb0f@dread11.news.tele.dk...
> På en form plaserer jeg en Image og derpå et BMP billed
> med
> Edit1.Text := IntToStr(Image1.Canvas.Pixels[X,Y]);
> udlæser jeg billed farverne.
>
> Dette er ok med BMP filer, men ikke med JPG filer
>
> Er det mugligt, vel en løsning være velkommen
>
> MVH
> Henning
>



Henning Madsen (01-01-2007)
Kommentar
Fra : Henning Madsen


Dato : 01-01-07 20:14

Godt Nytår (Håber I også er her fremover, med nogle gode svar);

Og tak til Flozzy for svaret.
Det virker, men lidt underligt syntes jeg.
Det er ligesom om den ikke vel læse på et område(forestel dig billedet delt
i 4 så er der ingen læsning på den nederste til højre del,sådan ca.)?
udskrift verdien svinger meget, selv om jeg læser på en nogenlunde ensartet
farve ?
Prøvede at køre programmet på en BMP fil med et selvtegnet billed, hvor
f.eks. rød er 255 og sort 0
Ved mouvning over disse farver, mener jeg der burde vises samme tal.?
Jeg ved godt der er flere 'slaks' farve tal, er det mugligt at definerer
udskriften således at f.eks.Rød vises som 255 ?
Det med farver er noget indviklet noget, så bær over med mig hvis der er
lidt sludder i det jeg har skrevet ???
Mvh
Henning

"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:4595ea13$0$858$edfadb0f@dread12.news.tele.dk...
> Hej Henning
> Prøv evt. det her:
>
> //Globale variable
> var PixCol: TColor;
> ScreenDC: HWND;
>
> // I Formens OnCreate event
> ScreenDC := GetDC(0);
>
> // I Formens OnClose event
> ReleaseDC(Form1.Handle,ScreenDC);
>
> // og brug Image1's OnMouseMove event
> procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
> Y: Integer);
> begin
> PixCol := GetPixel(ScreenDC, X, Y);
> Edit1.Text := '$00' + IntToHex(Integer(PixCol), 6);
> end;
>
> Det burde virke. Godt Nytår til alle!
>
> Mvh. Flozzy
>
> "Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
> news:4592ca58$0$192$edfadb0f@dread11.news.tele.dk...
>> På en form plaserer jeg en Image og derpå et BMP billed
>> med
>> Edit1.Text := IntToStr(Image1.Canvas.Pixels[X,Y]);
>> udlæser jeg billed farverne.
>>
>> Dette er ok med BMP filer, men ikke med JPG filer
>>
>> Er det mugligt, vel en løsning være velkommen
>>
>> MVH
>> Henning
>>
>
>



Flozzy (02-01-2007)
Kommentar
Fra : Flozzy


Dato : 02-01-07 06:20

Hej igen

Ja, jeg er også kommet til samme resultat. Jeg har nu i stedet for
OnMouseMove lavet en Timer med nedenstående ''indhold''. Den virker på hele
skærmen, men du kan jo selv begrænse visningen til Image1.

procedure TForm1.Timer1Timer(Sender: TObject);
var
CursorPos: TPoint;
PixelCol: TColor;
begin
GetCursorPos(CursorPos);
PixelCol := GetPixel(ScreenDC, CursorPos.x, CursorPos.y);
Label1.Caption := 'Delphi: $00' + IntToHex(Integer(PixelCol), 6);
Label2.Caption := 'RGB: ' + IntToStr(GetRValue(PixelCol)) + ' ' +
IntToStr(GetGValue(PixelCol)) + ' ' + IntToStr(GetBValue(PixelCol)) ;
end;

Håber du kan bruge det i stedet.

Mvh. Flozzy

"Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
news:45995bd5$0$6266$edfadb0f@dread14.news.tele.dk...
> Godt Nytår (Håber I også er her fremover, med nogle gode svar);
>
> Og tak til Flozzy for svaret.
> Det virker, men lidt underligt syntes jeg.
> Det er ligesom om den ikke vel læse på et område(forestel dig billedet
> delt i 4 så er der ingen læsning på den nederste til højre del,sådan ca.)?
> udskrift verdien svinger meget, selv om jeg læser på en nogenlunde
> ensartet farve ?
> Prøvede at køre programmet på en BMP fil med et selvtegnet billed, hvor
> f.eks. rød er 255 og sort 0
> Ved mouvning over disse farver, mener jeg der burde vises samme tal.?
> Jeg ved godt der er flere 'slaks' farve tal, er det mugligt at definerer
> udskriften således at f.eks.Rød vises som 255 ?
> Det med farver er noget indviklet noget, så bær over med mig hvis der er
> lidt sludder i det jeg har skrevet ???
> Mvh
> Henning

>
> "Flozzy" <jje@venlig.dk> skrev i en meddelelse
> news:4595ea13$0$858$edfadb0f@dread12.news.tele.dk...
>> Hej Henning
>> Prøv evt. det her:
>>
>> //Globale variable
>> var PixCol: TColor;
>> ScreenDC: HWND;
>>
>> // I Formens OnCreate event
>> ScreenDC := GetDC(0);
>>
>> // I Formens OnClose event
>> ReleaseDC(Form1.Handle,ScreenDC);
>>
>> // og brug Image1's OnMouseMove event
>> procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
>> Y: Integer);
>> begin
>> PixCol := GetPixel(ScreenDC, X, Y);
>> Edit1.Text := '$00' + IntToHex(Integer(PixCol), 6);
>> end;
>>
>> Det burde virke. Godt Nytår til alle!
>>
>> Mvh. Flozzy
>>
>> "Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
>> news:4592ca58$0$192$edfadb0f@dread11.news.tele.dk...
>>> På en form plaserer jeg en Image og derpå et BMP billed
>>> med
>>> Edit1.Text := IntToStr(Image1.Canvas.Pixels[X,Y]);
>>> udlæser jeg billed farverne.
>>>
>>> Dette er ok med BMP filer, men ikke med JPG filer
>>>
>>> Er det mugligt, vel en løsning være velkommen
>>>
>>> MVH
>>> Henning
>>>
>>
>>
>
>



Henning Madsen (02-01-2007)
Kommentar
Fra : Henning Madsen


Dato : 02-01-07 18:33

Hej Flozzy
Jeg har nu prøvet dit nye forslag.
Umiddelbart virker det meget mere rigtigt.
Må indrømme at jeg ikke helt kan gennemskue programmet, hvorfor bruger du
$00 ??
Nogle resultater :
Ved et JPG billed og noget der ligner Sort viser Delphi: $00150E0B og RGB:
11141421
og noget der ligner Grøn viser Delphi:
$00345933 og RGB: 51898952
Ved et BMP billed der er Rød viser Delphi: $000000FF og RGB: 255000
Grøn viser Delphi: $0000FF00 og RGB:
02552550
Kan JPG vises som RGB farvekode ??
En lille forklaring
Er vild med liljer, på havetegningen tegnes små cirkler der hvor løgene er,
med dit program var det så meningen
at markerer hovedfarven på JPG liljebilledet og overfører den til cirklen.
(Rød, Hvid, Gul o.s.v.)
Derfor er jeg i bekneb for den rigtige (brugbare) farvekode.
Vel gerne engang til takke for hjælpen
Hilsen
Henning


"Flozzy" <jje@venlig.dk> skrev i en meddelelse
news:4599ebbf$0$887$edfadb0f@dread12.news.tele.dk...
> Hej igen
>
> Ja, jeg er også kommet til samme resultat. Jeg har nu i stedet for
> OnMouseMove lavet en Timer med nedenstående ''indhold''. Den virker på
> hele skærmen, men du kan jo selv begrænse visningen til Image1.
>
> procedure TForm1.Timer1Timer(Sender: TObject);
> var
> CursorPos: TPoint;
> PixelCol: TColor;
> begin
> GetCursorPos(CursorPos);
> PixelCol := GetPixel(ScreenDC, CursorPos.x, CursorPos.y);
> Label1.Caption := 'Delphi: $00' + IntToHex(Integer(PixelCol), 6);
> Label2.Caption := 'RGB: ' + IntToStr(GetRValue(PixelCol)) + ' ' +
> IntToStr(GetGValue(PixelCol)) + ' ' + IntToStr(GetBValue(PixelCol)) ;
> end;
>
> Håber du kan bruge det i stedet.
>
> Mvh. Flozzy
>
> "Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
> news:45995bd5$0$6266$edfadb0f@dread14.news.tele.dk...
>> Godt Nytår (Håber I også er her fremover, med nogle gode svar);
>>
>> Og tak til Flozzy for svaret.
>> Det virker, men lidt underligt syntes jeg.
>> Det er ligesom om den ikke vel læse på et område(forestel dig billedet
>> delt i 4 så er der ingen læsning på den nederste til højre del,sådan
>> ca.)?
>> udskrift verdien svinger meget, selv om jeg læser på en nogenlunde
>> ensartet farve ?
>> Prøvede at køre programmet på en BMP fil med et selvtegnet billed, hvor
>> f.eks. rød er 255 og sort 0
>> Ved mouvning over disse farver, mener jeg der burde vises samme tal.?
>> Jeg ved godt der er flere 'slaks' farve tal, er det mugligt at definerer
>> udskriften således at f.eks.Rød vises som 255 ?
>> Det med farver er noget indviklet noget, så bær over med mig hvis der er
>> lidt sludder i det jeg har skrevet ???
>> Mvh
>> Henning
>
>>
>> "Flozzy" <jje@venlig.dk> skrev i en meddelelse
>> news:4595ea13$0$858$edfadb0f@dread12.news.tele.dk...
>>> Hej Henning
>>> Prøv evt. det her:
>>>
>>> //Globale variable
>>> var PixCol: TColor;
>>> ScreenDC: HWND;
>>>
>>> // I Formens OnCreate event
>>> ScreenDC := GetDC(0);
>>>
>>> // I Formens OnClose event
>>> ReleaseDC(Form1.Handle,ScreenDC);
>>>
>>> // og brug Image1's OnMouseMove event
>>> procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
>>> Y: Integer);
>>> begin
>>> PixCol := GetPixel(ScreenDC, X, Y);
>>> Edit1.Text := '$00' + IntToHex(Integer(PixCol), 6);
>>> end;
>>>
>>> Det burde virke. Godt Nytår til alle!
>>>
>>> Mvh. Flozzy
>>>
>>> "Henning Madsen" <HKM@madsen.tdcadsl.dk> skrev i en meddelelse
>>> news:4592ca58$0$192$edfadb0f@dread11.news.tele.dk...
>>>> På en form plaserer jeg en Image og derpå et BMP billed
>>>> med
>>>> Edit1.Text := IntToStr(Image1.Canvas.Pixels[X,Y]);
>>>> udlæser jeg billed farverne.
>>>>
>>>> Dette er ok med BMP filer, men ikke med JPG filer
>>>>
>>>> Er det mugligt, vel en løsning være velkommen
>>>>
>>>> MVH
>>>> Henning
>>>>
>>>
>>>
>>
>>
>
>



Flozzy (03-01-2007)
Kommentar
Fra : Flozzy


Dato : 03-01-07 04:34

Hej Henning

> Må indrømme at jeg ikke helt kan gennemskue programmet, hvorfor bruger du
> $00 ??

Det er bare for at afspejle Delphi's farvekode. Den kan sættes direkte ind i
f.eks. Formens Color Property.

> Nogle resultater :
> Ved et JPG billed og noget der ligner Sort viser Delphi: $00150E0B og
> RGB: 11141421
> og noget der ligner Grøn viser Delphi:
> $00345933 og RGB: 51898952
> Ved et BMP billed der er Rød viser Delphi: $000000FF og RGB: 255000
> Grøn viser Delphi: $0000FF00 og RGB:
> 02552550
> Kan JPG vises som RGB farvekode ??

Ja, det skulle det da gerne. Se koden
Label2.Caption := 'RGB: ' + IntToStr(GetRValue(PixelCol)) + ' ' +
IntToStr(GetGValue(PixelCol)) + ' ' + IntToStr(GetBValue(PixelCol)) ;
Her hentes RGB værdierne og vises adskilt vha. + ' ' +.

Du kan også teste farven visuelt på eksempelvis et Panel.
For at undgå flimmer, sæt i Formens OnCreate
DoubleBuffered := True;
og i Timer'en
Panel1.Color := PixelCol;

> En lille forklaring
> Er vild med liljer, på havetegningen tegnes små cirkler der hvor løgene
> er, med dit program var det så meningen
> at markerer hovedfarven på JPG liljebilledet og overfører den til cirklen.
> (Rød, Hvid, Gul o.s.v.)
> Derfor er jeg i bekneb for den rigtige (brugbare) farvekode.
> Vel gerne engang til takke for hjælpen
> Hilsen
> Henning

Lyder spændende! Har selv dyrket liljer, indtil de små røde biller fik dem
gnasket i stykker .

Mvh. Flozzy



Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409071
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste