Ez a leírás elsõsorban a raw fájl nyers képadataihoz való hozzáférést tartalmazza, a fejléccel annak érvénységével a fejlécben
található adatokkal (gépbeállítások, previewkép) nem foglalkoztam. Ha esetleg ebben a témában van infoja azt szívesen
veszem.
Ez a fájl az Olympus állítása szerint a nyers CCD-rõl érkezõ jeleket tartalmazza változtatások/korrekciók nélkül.
A raw (.orf) fájl két jól elkülöníthetõ részre osztható: a fejléc, és a nyers képadatok.
-Fejléc:
A fejléc hitelessége megállapítható az elsõ 4 byte-ból (MMOR, $4D $4D $4F $52) (magic num).
-Képadatok:
A képadatok a fájlban a $4000-es címtõl kezdve a fájl végéig találhatók.
A képadatok egy 2256x1684-es pixel mátrixban vannak. A képadatokat pixel folytonosan balról jobbra és fentrõl lefelé kell
értelmezni. Az egyes képpontok 10 bit-nyi információt tartalmaznak. A képpontok mindegyike egy adott szín fényességét
hordozza. A színek a következõképpen helyezkednek el:
A bal fölsõ sarokban mindig vörös képpont van.
Egy képpont 2 byte-on van ábrázolva. A fájlban az elöl álló byte tartalmazza a felsõ 8 bitet, a második byte felsõ 2. bitje pedig
a képpont alsó 2 bitjét. Pl: fájlban a $4000-es címen a $47 és a $4001-es cimen $80 helyezkedik el. Ennek értelmezése a
következõ:
$47 = 01000111
$80 = 10000000
Az eredmény: 01000111 + 10 = 0100011110 = $11E = 286.
A következõ delphi5 kódrészlet megjeleníti a képet a 10 bitet egyszerû lienáris konverzióval 8 bitté alakítja. A kód nem
tartalmaz ellenõrzést ezért csak valódi E10-bõl származó .orf fájlon mûködik.
procedure TForm1.Button1Click(Sender: TObject);
{*******************************************************}
{ Olympus E10 raw file viewer }
{ Copyright (c) 2001Galló László }
{ All rights reserved }
{ mailto:lgallo@freemail.hu }
{ http://www.extra.hu/e10 }
{*******************************************************}
var i,j,k:LongInt;
TempStream : TMemoryStream;
colors:array [0..1] of word;
r,g,b, w:integer;
lookuptable:array [0..1023] of byte;
function rotate(w:word):byte;
var l,h,b:byte;
begin
l:=Lo(w);
h:=Hi(w);
w:=l shl 2;
h:=h shr 6;
w:=w + h;
If w > 1023 then begin
w:=1023;
end;
b:=lookuptable[w];
rotate:=b;
end;
begin
for i:=0 to 255 do begin
lookuptable[i*4+0]:=i;
lookuptable[i*4+1]:=i;
lookuptable[i*4+2]:=i;
lookuptable[i*4+3]:=i;
end;
w:=752*3;
image1.Picture.Bitmap.PixelFormat:=pf24bit;
image1.Picture.Bitmap.Height:=1684;
image1.Picture.Bitmap.Width:=w;
TempStream := TMemoryStream.Create;
TempStream.LoadFromFile('Pxxxxxxx.ORF');
TempStream.Seek($4000,soFromBeginning);
j:=0;
k:=0;
r:=1;
g:=256;
b:=256*256;
For i:=$4000 to $4000+Trunc(((TempStream.Size-$4000)/SizeOf(colors)))-1 do begin
TempStream.Read(colors,sizeof(colors));
If k mod 2 <> 0 then begin
image1.Canvas.Pixels[j,k]:=rotate(colors[0])*g; //g
Inc(j);
image1.Canvas.Pixels[j,k]:=rotate(colors[1])*b; //b
Inc(j);
end else begin
image1.Canvas.Pixels[j,k]:=rotate(colors[0])*r; //r
Inc(j);
image1.Canvas.Pixels[j,k]:=rotate(colors[1])*g; //g
Inc(j);
end;
If j >= w then begin
j:=0;
inc(k);
form1.Caption:=IntToStr(k);
end;
end;
image1.Picture.SaveToFile('rgb.bmp');
TempStream.Free;
end;
A program letölthetõ (futtatható) verziója: [raw2bmp.zip]
Az eredmény képen látható hogy a színek megfelelõ kiegyenlítést igényelnek (TruePic eljárás):
Az eredeti kép egy részlete:

A program által konvertált részlet:

RGB konverzió (Photoshop Plug-In):

RGB, Auto image process (TruePic) (Photoshop Plug-In):

2001.01.04. v1.0.0
2001.01.05. v1.1.0
2001.01.22. v1.2.0
2001.01.25. v1.2.1
|