Avatar billede Slettet bruger
15. november 2001 - 19:55 Der er 6 kommentarer og
1 løsning

Antal Farver

Hvordan kan jeg lettest finde antallet af farver i et billede.

Mvh. Simon
Avatar billede palmanimal Nybegynder
15. november 2001 - 20:18 #1
Vha IrfanView.
www.irfanview.com (freeware)
Åbn billedet. Vælg image->information

:-)
Avatar billede Slettet bruger
15. november 2001 - 20:22 #2
selvfølgelig via Delphi

Mvh. Simon
Avatar billede speedy Nybegynder
15. november 2001 - 21:17 #3
start med at tilføje denne constant og type:

const
    MaxPixelCount = 65536;

type
    pRGBTripleArray = ^TRGBTripleArray;
    TRGBTripleArray = array[0..MaxPixelCount-1] of TRGBTriple;


Så indsætter du denne funktion:

function CountColors(const Bitmap: TBitmap): integer;
var
  Flags:  array[byte, byte] of TBits;
  i, j, k: integer;
  rowIn:  pRGBTripleArray;
begin
  Assert (Bitmap.PixelFormat = pf24Bit);
  for j := 0 to 255 do
    for i := 0 to 255 do
      Flags[i,j] := nil;

  for j := 0 to Bitmap.Height-1 do
    begin
      rowIn  := Bitmap.Scanline[j];
      for i := 0 to Bitmap.Width-1 do
        begin
          with rowIn[i] do
            begin
              if not Assigned(Flags[rgbtRed, rgbtGreen]) then
                begin
                  Flags[rgbtRed, rgbtGreen] := TBits.Create;
                  Flags[rgbtRed, rgbtGreen].Size := 256;
                end;
              Flags[rgbtRed,rgbtGreen].Bits[rgbtBlue] := true;
            end;
          end;
        end;

      result := 0;
      for j := 0 to 255 do
        begin
          for i := 0 to 255 do
            begin
              if Assigned(Flags[i,j]) then
                begin
                  for k := 0 to 255 do
                    if Flags[i,j].Bits[k] then
                      inc(Result);
                  Flags[i,j].Free;
                end;
            end;
        end;
end;



Du kan bruge den på denne måde:

var
  bit: TBitmap;
begin
  bit := Tbitmap.Create;
  bit.LoadFromFile(\'c:\\test.bmp\');
  ShowMessage(IntToStr(CountColors(bit)));
end;


/SpEeDy
Avatar billede Slettet bruger
15. november 2001 - 22:39 #4
Giver Fejl
Assertation faliure (fil og linje for fejl)

Mvh. Simon
Avatar billede Slettet bruger
15. november 2001 - 22:47 #5
duer den kun til 24 bit billeder.
for det jeg skal bruge den til dekker ikke kun 24 bit billeder

Mvh. Simon
Avatar billede speedy Nybegynder
16. november 2001 - 00:03 #6
Så skift den første linie med assert(  ud med denne:

  Bitmap.PixelFormat := pf24Bit;

/SpEeDy

Og nej den virker ikke kun på 24 bit. den virker på alle
Avatar billede Slettet bruger
16. november 2001 - 00:30 #7
Tak nu virker den.

Mvh. Simon
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester