Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 3.182 pregleda

Najnovija ↓

Informacije o slici 29.04.2010. u 14:57 · pre 200 meseci #1
Pozdrav,

zna li neko kako bih iz delphija mogao iščitati informacije o nekoj slici (veličina, rezolucija, etc., ono što slika nosi sa sobom), npr. da se zada putanja ka fajlu i da se iz njega iščitaju informacije o istom!?! Bitno mi je da funkcionalnost bude univerzalna, odnosno da važi za bilo koji format slike (jpg, jpeg, gif, png, etc.)...

Unapred se zahvaljujem...
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: Informacije o slici 29.04.2010. u 16:36 · pre 200 meseci #2
Ne želiš da koristiš TPicture i time učitavaš ceo fajl čime ćeš dobiti sve osnovne podatke o slici? Želiš da na osnovu headera slika različitih formata/ekstenzija neka funkcija isčita osnovne podatke? Ako je ovo drugo, koliko je meni poznato ne postoji javno dostupno univerzalno rešenje, mada se može napraviti.
Re: Informacije o slici 29.04.2010. u 18:25 · pre 200 meseci #3
Trebala bi mi neka funkcionalnost koja će iščitati veličinu slike (KB, MB), rezoluciju (width/height u pixelima), horisontal / vertical resolution (dpi), color representation npr. sRGB.
Potpis
Someone's sitting in the shade today because someone planted a tree a long time ago.
Re: Informacije o slici 29.04.2010. u 20:07 · pre 200 meseci #5
Code:
function JPEGDimensions(Filename : string; var X, Y : Word) : boolean;
var
  SegmentPos : Integer;
  SOIcount : Integer;
  b : byte;
begin
  Result  := False;
  with TFileStream.Create(Filename, fmOpenRead or fmShareDenyNone) do
  begin
    try
      Position := 0;
      Read(X, 2);
      if (X <> $D8FF) then
        exit;
      SOIcount  := 0;
      Position  := 0;
      while (Position + 7 < Size) do
      begin
        Read(b, 1);
        if (b = $FF) then begin
          Read(b, 1);
          if (b = $D8) then
            inc(SOIcount);
          if (b = $DA) then
            break;
        end; {if}
      end; {while}
      if (b <> $DA) then
        exit;
      SegmentPos  := -1;
      Position    := 0;
      while (Position + 7 < Size) do
      begin
        Read(b, 1);
        if (b = $FF) then
        begin
          Read(b, 1);
          if (b in [$C0, $C1, $C2]) then
          begin
            SegmentPos  := Position;
            dec(SOIcount);
            if (SOIcount = 0) then
              break;
          end; {if}
        end; {if}
      end; {while}
      if (SegmentPos = -1) then
        exit;
      if (Position + 7 > Size) then
        exit;
      Position := SegmentPos + 3;
      Read(Y, 2);
      Read(X, 2);
      X := Swap(X);
      Y := Swap(Y);
      Result  := true;
    finally
      Free;
    end;
  end;
end;
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme