[Delphi] JPEGファイルの画像サイズとモード(RGB/CMYK)を得る
function GetJPEGSize( FileName:String; var AWidth, AHeight:Integer;
 var CMYK :Boolean ): Boolean;

    function SwapEndian(S :word):word;
    begin
        Result := (S and $00FF) shl 8 + (S and $FF00) shr 8;
    end;

const
    SOF0 : Word = $FFC0;      // Normal
    SOF2 : Word = $FFC2;      // Progressive
var
        wrk      : Word ;
        Sampling : Byte;
        AStream  : TStream;
begin
    Result  := False;
    AStream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
    try
        // JFIF
        AStream.ReadBuffer(wrk,2);  wrk := SwapEndian(wrk);
        if wrk<>$FFD8 then Exit;

        While True do begin
            AStream.ReadBuffer(wrk,2);  wrk := SwapEndian(wrk);
            // JPEG Maker
            if (wrk= SOF0) or (wrk= SOF2)  then begin
                // Skip Segment Length
                AStream.Position := AStream.Position+2;
                // Skip Sample
                AStream.Position := AStream.Position+1;
                // Height
                AStream.ReadBuffer(wrk,2);  AHeight := SwapEndian(wrk);
                // Width
                AStream.ReadBuffer(wrk,2);  AWidth  := SwapEndian(wrk);

                // ColorMode
                AStream.ReadBuffer(Sampling,1);
                CMYK := (Sampling=4);
                Result :=True;
                Break;
            end
            else if (wrk=$FFFF) or (wrk=$FFD9) then begin
                Break;
            end;
            // Skip Segment
            AStream.ReadBuffer(wrk,2);  wrk := SwapEndian(wrk);
            AStream.Position := AStream.Position+(wrk-2);
        end;
    finally
        AStream.Free;
    end;
end;


<< 使用例 >>
procedure TForm1.Button1Click(Sender: TObject);
var
        sx, sy: integer;
        CMYK: boolean;
begin
    if GetJPEGSize(ファイル名,sx,sy,CMYK)=FALSE then Exit;
    if CMYK then begin
        MessageDlg( 'このファイルは未対応',mtError,[mbOk],0 );
        Exit;
    end;
    //ファイルの読み込み処理
end;
      

・インターネット上の情報や書籍の内容を一部参考に作成してます。
・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。
・記述内容に問題点や改善点がありましたらこちらまでお願いします。

サンプル集の一覧に戻る