Entwickler-Ecke

Sonstiges (Delphi) - Intel Jpeg Library (ijl15.dll) benutzen


wulfskin - Mi 10.11.04 00:10
Titel: Intel Jpeg Library (ijl15.dll) benutzen
Hallo,

hab mal wieder ein Problem. Ich möchte JPEGs in Bitmaps umwandeln, die mit der Intel Jpeg Library (Version 1.5.4.36) komprimiert wurden.
Nun möchte ich dafür die Library (ijl15.dll) benutzen. Leider hat Intel die Entwicklung an dieser Bibliothek eingestellt und gibt auch keinen Quelltext mehr raus.
Hat jemand von euch schonmal mit dieser Bibliothek gearbeitet und kann mir kurz erklären, welche Methoden ich benutzen kann? Kennt jemand eine Adresse, wo ich mehr Informationen dazu finde?

Oder zur Not: Kennt jemand eine kostenlose Möglichkeit diese JPEGs in Bitmaps zu konvertieren z.B. mit Komponenten?

Gruß Hape!


MAlsleben - Mi 10.11.04 09:29

Hi

zum Umwandeln von jpeg in bmp gab es schon einige Beiträge hier im Forum.

z.B. hier: http://www.delphi-forum.de/viewtopic.php?t=32274

Oder einfach mal die Suche bemühen.

Gruß Micha


wulfskin - Mi 10.11.04 17:08

MAlsleben hat folgendes geschrieben:
Hi (...) zum Umwandeln von jpeg in bmp gab es schon einige Beiträge hier im Forum.
Hallo MAlsleben,

danke, aber ich weiss selber wie man JPEGs in das BMP Format umwandelt :roll:. Das Problem ist, dass Delphi nicht das Jpeg Format von Intel unterstützt, eine Konvertierung also gar nicht möglich ist. Deshalb benötigt man entweder Zugriff auf diese DLL oder es gibt sicherlich auch extra Komponenten, die das können.
Aber eigentlich will ich schon auf die DLL zugreifen. Vielleicht weiss ja jemand noch Rat!

Gruß Hape!


wulfskin - Do 11.11.04 22:28

Sodele,

nach ewig langer Suche, habe ich ein halbwegs funktionierendes Beispiel gefunden. Zusammen mit einer alten Hilfedatei des Formates hab ich mir dann diesen gut funktionierenden Quelltext zusammengebastelt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
{Addapted from JPEG_IO.pas:
Copyright © David J Taylor, Edinburgh
Web site:  www.satsignal.net
E-mail:    davidtaylor@writeme.com}

function DecodeJPGFileToBMP(const AStream: TMemoryStream;
  var ABitmap: TBitmap): Boolean;
var
  Width, Height, nChannels, dibPadBytes: DWord;
  jcprops : TJPEG_CORE_PROPERTIES;
  DIB: TDIBSection;
  Res: Integer;
begin
  Result := False;
  if ijlInit(@jcprops) = IJL_OK then begin
    jcprops.JPGFile := nil;
    jcprops.JPGBytes := AStream.Memory;
    jcprops.JPGSizeBytes := AStream.Size;
    Res := ijlRead(@jcprops, IJL_JBUFF_READPARAMS);
    if Res = IJL_OK then begin
      Width := jcprops.JPGWidth;
      Height := jcprops.JPGHeight;
      nChannels := jcprops.JPGChannels;
      dibPadBytes := ((((Width * nChannels) + 3div 4) * 4) -
        (Width * nChannels);
      FillChar (DIB, SizeOf(DIB), 0);
      if GetObject(ABitmap.Handle, SizeOf(DIB), @DIB) <> 0 then begin
      //***************
        DIB.dsBmih.biSize := SizeOf(TBitmapInfoHeader);
        DIB.dsBmih.biWidth := Width;
        DIB.dsBmih.biHeight := Height;
        DIB.dsBmih.biPlanes := 1;
        DIB.dsBmih.biBitCount := 24;
        DIB.dsBmih.biCompression := BI_RGB;
        DIB.dsBmih.biSizeImage := 0;
        DIB.dsBmih.biXPelsPerMeter := 0;
        DIB.dsBmih.biYPelsPerMeter := 0;
        DIB.dsBmih.biClrUsed := 0;
        DIB.dsBmih.biClrImportant := 0;
        jcprops.DIBWidth := Width;
        jcprops.DIBHeight := -Height;
        jcprops.DIBChannels := 3;
        jcprops.DIBColor := IJL_BGR;
        jcprops.DIBPadBytes := dibPadBytes;
        jcprops.DIBBytes := PByte (DIB.dsBm.bmBits);
        case jcprops.JPGChannels of
          1:
            jcprops.JPGColor := IJL_G;
          3:
            jcprops.JPGColor := IJL_YCBCR;
          else begin
            jcprops.DIBColor := TIJL_COLOR(IJL_OTHER);
            jcprops.JPGColor := TIJL_COLOR(IJL_OTHER);
          end;
        end;
        Res := ijlRead(@jcprops, IJL_JBUFF_READWHOLEIMAGE);
        if Res = IJL_OK then begin
          ABitmap.Modified := True;
          Result := True;
        end
        else
          MessageDlg(ijlErrorStr(Res), mtError, [mbOk], 0);
      end;
    end
    else
      MessageDlg(ijlErrorStr(Res), mtError, [mbOk], 0);
  end;
  ijlFree(@jcprops);
end;
Könnte ja jemanden interessieren,

gruß Hape!