Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


RGB värden i en picturebox

Postades av 2001-02-08 10:42:00 - Johan Nykvist, i forum visual basic - allmänt, Tråden har 10 Kommentarer och lästs av 700 personer

Finns det någon metod för att kontrollera vilka RGB värden en speciell punkt i en picturebox har.

MVH
Johan


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 11:42:00 - Sven Åke Persson

API GetPixel


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 11:48:00 - Joakim Spångberg

<code>
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

GetPixel(Picture1.hdc, XX, YY)
</code>


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 11:56:00 - Peter Holm

Ja men vill man ha roligt kan man alltid göra så här...... Det är roligare att lösa problemen själv.... Det är ibland lite jobbit att fatta API för ovana programmerare.... Så se mitt förslag som ett alternativ bara.

/peterh

Själv skulle jag ju använda API.....

==================================

Option Explicit
Option Base 1

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print "RR = "; getRGB(Picture1, X, Y)(1)
Debug.Print "GG = "; getRGB(Picture1, X, Y)(2)
Debug.Print "BB = "; getRGB(Picture1, X, Y)(3)
Debug.Print "RRGGBB = "; getRGBstr(Picture1, X, Y)
End Sub

Public Function getRGB(Obj As Object, X As Single, Y As Single) As Byte()
Dim RGB(3) As Byte
RGB(1) = CByte("&H" & Right(Hex(Obj.Point(X, Y)), 2))
RGB(2) = CByte("&H" & Mid(Hex(Obj.Point(X, Y)), 3, 2))
RGB(3) = CByte("&H" & Left(Hex(Obj.Point(X, Y)), 2))
getRGB = RGB()
End Function

Public Function getRGBstr(Obj As Object, X As Single, Y As Single) As String
getRGBstr = Right(Hex(Obj.Point(X, Y)), 2) & Mid(Hex(Obj.Point(X, Y)), 3, 2) & Left(Hex(Obj.Point(X, Y)), 2)
End Function


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 12:03:00 - Andreas Hillqvist

Finns en inbyggd funktion:

Dim Color as long
Color = Picture1.Point(X, Y)

Vill du sedan ha ut förgerna finns det två sätt att göra det på:

Snabbare sätt:
Private Type ColorRGB
Red As Byte
Green As Byte
Blue As Byte
End Type

Private Type ColorLong
Color As Long
End Type


Dim LongColor As ColorLong
Dim RGBColor As ColorRGB
LongColor.Color = Color
LSet RGBColor = LongColor

Eller det traditionella sättet:

Dim Color As Long
Dim Red As Byte
Dim Green As Byte
Dim Blue As Byte
Red = Color And vbRed
Green = (Color And vbGreen) \ &H100
Blue = (Color And vbBlue) \ &H10000


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 13:48:00 - Andreas Hillqvist

Det är inge särskilt effektiv sätt att göra det på... Men tack för ditt bidrag...

Vill hjälpa dig skriva bättre kod. Så här är mina synpunkter:

* Funktionen hämtar värdet för pixelen tre gånger per anrop. Ett anrop och en variabel löser det.
* Konvertering av tal till hex kod görs tre gånger. Samma sak här ett anrop och en variabel löser det.
* Det går snabbar att arbeta med tal och logiska operationer än att använda sträng operationer.
* Vid användning av funktionen bör man använda en variabel och inte anropa den tre gånger.
* Anropet till Point sker med latebindings efter som variabeln är deklarerad som object


Option Explicit
Option Base 1

Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim RGB() As Byte
RGB = getRGB(Picture1, X, Y)
Debug.Print "RR = "; RGB(1)
Debug.Print "GG = "; RGB(2)
Debug.Print "BB = "; RGB(3)
Debug.Print "RRGGBB = "; getRGBstr(Picture1, X, Y)
End Sub

Public Function getRGB(Obj As PictureBox, X As Single, Y As Single) As Byte()
Dim RGB(3) As Byte
Dim Color As Long
Color = Obj.Point(X, Y)
RGB(1) = Color And vbRed
RGB(2) = (Color And vbGreen) \ &H100
RGB(3) = (Color And vbBlue) \ &H10000
getRGB = RGB()
End Function

Public Function getRGBstr(Obj As PictureBox, X As Single, Y As Single) As String
getRGBstr = Hex(Obj.Point(X, Y))
End Function

/Mvh, Andreas Hillqvist


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 15:00:00 - Peter Holm

Tack för dina synpunkter Andreas....

Som jag skrev i mitt inlägg skulle jag själv använda API..... Det sätt som jag gjort det på är endast ett av hundra... Det vet du och det vet jag....

Han som frågade, efterfrågade endast ett sätt att kolla vilken färg en viss pixel har.. inget om optimering framgår....

Självklart vet jag att det är onödigt att anropa en funktion tre gånger istället för en gång....

Men ibland favoriserar jag lättläst kod framför snabb kod. Jag menar VB är inget språk att skriva spel och andra hypersnabba grafik-rutiner i..

Mina funktioner för att lösa problemet är:

* Estetiskt korrekt
* Objektorienterat

Men vem bryr sig.....

Återigen tack för dina synpunkter...

/peterh


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 15:23:00 - Andreas Hillqvist

Jag är lite för fixerad vid optimering. Beror väl på att det ingår i min relion.
Försöker frälsa världen genom att optimera kod...

Näää... Kanske inte riktigt...

Risken med att visa exempel som är långt från effektiv är att de sprider sig. Detta gäller ju även tvärt om.
Det är därför jag fäster stor vikt vid att alltid försöka göra ge en så optimal lösning som möjligt går inom rimlig krav. Vilket kommer förhoppningsvis leder till en bättrer värld.
Det blir lätt då att jag går fram som en ångvält och visar inte mycket till respekt för andra.



Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-08 15:48:00 - Peter Holm

Det är lugnt....

/peterh

Men att optimera för en 486 kan jag förstå men för en PIII-800 Mhz

Men OK då.


Svara

Sv: RGB värden i en picturebox

Postades av 2001-02-10 17:50:00 - Kjell Andersson

Enklast och utan API



color = Picture1.Point(i, j)
red = CLng(color Mod 256)
green = CLng((color \ 256) Mod 256)
blue = CLng((color \ 65536) Mod 256)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 616
27 953
271 709
5 735
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies