亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unit1.pas

?? DICOM文件的讀寫程序
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
Unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Memo1: TMemo;
    Image: TImage;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
		Buff   : PChar;
	  width  : Integer;
	  height : Integer;
    { Public declarations }
		procedure DisplayImage;
  end;

(***********************************************************)
type
	int32  = LongInt;
	uint32 = Cardinal;
	int16  = SmallInt;
	uint16 = Word;
	int8   = ShortInt;
	uint8  = Byte;

function read16( var fp : File ): uint16;
function read32 ( var fp : File ): uint32;
procedure read_dicom_data( var buff : PChar; var width:Integer;
                           var height:Integer; var fp:File );
procedure flip_16bit_data ( var buff : PChar; width : Integer; height:Integer);
procedure scale16to8( var buff : PChar; width : Integer; height:Integer);


var
	little_endian   : Integer = 1;  //1 for pre-swapped
	bytes_per_pixel : Integer = 1;
	scale_flag      : Integer = 0;  //scale 16 bits to 8
	flip_flag       : Integer = 0;  //flip 16 bit data values
	no_flip_flag    : Integer = 0;  //no flip no matter what!
	invert_flag     : Integer = 0;	//invert data values

	infp  : File;  	//DICOM file
	textfp : Text;  //text file containing DICOM header info

var
  Form1: TForm1;

implementation

{$R *.DFM}

(***********************************************************)
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
			// open the input DICOM file
		AssignFile(infp, OpenDialog1.FileName);
	  Reset(infp, 1);

			// open the DICOM text file
		AssignFile(textfp, 'text.txt');
	  Rewrite(textfp);

		read_dicom_data(buff, width, height, infp);

		if CheckBox1.Checked then
		begin
    	flip_flag := 1;
    	flip_16bit_data ( buff, width, height);
		end;

		scale16to8( buff, width, height );

    CloseFile(infp);
    CloseFile(textfp);

    Memo1.Lines.LoadFromFile('text.txt');

// Display Image
    DisplayImage;
  end;
end;


procedure TForm1.DisplayImage;
var
  I       : Integer;
	hBmp    : HBITMAP;
  BI      : PBitmapInfo;
  BIH     : TBitmapInfoHeader;
  Bmp     : TBitmap;
  TmpDC   : hDC;
  ImagoDC : hDC;
begin
		// Fill BitmapInfoHeader structure
	BIH.biSize   		 	 	:= Sizeof(BIH);
	BIH.biWidth  		 	 	:= width;
  BIH.biHeight 		 	 	:= -height;
	BIH.biPlanes 		 	 	:= 1;
  BIH.biBitCount 	 	 	:= 8;
	BIH.biCompression 	:= BI_RGB;
  BIH.biSizeImage	 	 	:= 0;
	BIH.biXPelsPerMeter := 0;
  BIH.biYPelsPerMeter := 0;
	BIH.biClrUsed       := 0;
  BIH.biClrImportant  := 0;

{$P+,S-,W-,R-}

 		// Create DIB Bitmap Info with actual color table
	BI := AllocMem(SizeOf(TBitmapInfoHeader) + 256*Sizeof(TRGBQuad));
	try
	  BI^.bmiHeader := BIH;
	  for I:=0 to 255 do begin
  		BI^.bmiColors[I].rgbBlue     := Byte( I );
    	BI^.bmiColors[I].rgbGreen    := Byte( I );
	    BI^.bmiColors[I].rgbRed      := Byte( I );
		  BI^.bmiColors[I].rgbReserved := 0;
    end;

	  Bmp        := TBitmap.Create;
  	Bmp.Height := width;
	  Bmp.Width  := height;

	  ImagoDC := GetDC(Form1.Handle);
	  hBmp :=  CreateDIBitmap(
    				ImagoDC,		// handle of device context
    				BIH,									// address of bitmap size and format data
    				CBM_INIT,							// initialization flag
	    			buff,									// address of initialization data
  	  			BI^,									// address of bitmap color-format data
    				DIB_RGB_COLORS ); 		// color-data usage
	  Bmp.Handle := hBmp;

			// Draw bitmap proportional into the given Image
//  	Image.Canvas.Brush.Color := clRED;
//	  Image.Canvas.FillRect(Image.BoundsRect);
//		Image.Canvas.StretchDraw(ImgRect, Bmp);
Image.Picture.Bitmap.Assign( Bmp );
Image.Refresh;

	  Bmp.Free;
	except
//		showmessage(MainForm.MultiLanguage1.GetMsg('XOutOfMemory'));
	  exit;
  end;
  FreeMem( BI, SizeOf(TBitmapInfoHeader) + 256*Sizeof(TRGBQuad));

{$P-,S+,W+,R+}
end;











(***********************************************************)
function read16( var fp : File ): uint16;
var
	t1, t2 : uint8;
  n      : Integer;
begin
	BlockRead(fp, t1, SizeOf(uint8), n);
	BlockRead(fp, t2, SizeOf(uint8), n);

  if little_endian <> 0
  	then Result := (t1 + t2*256) AND $FFFF
  	else Result := (t1*256 + t2) AND $FFFF;
end;

(***********************************************************)
function read32 ( var fp : File ): uint32;
var
	t1, t2, t3, t4 : uint8;
  n : Integer;
begin
	BlockRead(fp, t1, SizeOf(uint8), n);
	BlockRead(fp, t2, SizeOf(uint8), n);
	BlockRead(fp, t3, SizeOf(uint8), n);
	BlockRead(fp, t4, SizeOf(uint8), n);

  if little_endian <> 0
  	then Result := (t1 + t2*256 + t3*256*256 + t4*256*256*256) AND $FFFFFFFF
    else Result := (t1*256*256*256 + t2*256*256 + t3*256 + t4) AND $FFFFFFFF;
end;

(***********************************************************)
procedure read_dicom_data( var buff : PChar; var width:Integer;
                           var height:Integer; var fp:File );
type
  dicom_types = (unknown, i8, i16, i32, ui8, ui16, ui32, _string );
var
	first_one    : Boolean;
  time_to_quit : Boolean;

	group, element, dummy, e_len, remaining, tmp : uint32;
  info   : string;
  t      : dicom_types;
  where  : LongInt;
  tx     : array [0..3] of Char;
  n, i   : Integer;
begin
  info := '';
  t := unknown;

		// try DICOM part 10 i.e. a 128 byte file preamble followed by "DICM"
  seek(fp, 0);
	where := FilePos(fp);
	BlockRead(fp, tx, 4*SizeOf(Char), n);
  if (tx[0] <> 'D') OR (tx[1] <> 'I') OR (tx[2] <> 'C') OR (tx[3] <> 'M') then
	begin
	  seek(fp, 128); //skip the preamble - next 4 bytes should be 'DICM'
  	where := FilePos(fp);
		BlockRead(fp, tx, 4*SizeOf(Char), n);
		if (tx[0] <> 'D') OR (tx[1] <> 'I') OR (tx[2] <> 'C') OR (tx[3] <> 'M') then
		begin
//    	showmessage('not a proper DICOM file');

      	// try DICOM without header
	  	seek(fp, 0);
	   	group   := read16(fp);
	    element := read16(fp);
      if NOT (group in [$0000, $0002, $0004, $0008]) then
				exit;
	  	seek(fp, 0);
		end;
	end;

		// Read DICOM Tags
	time_to_quit := FALSE;
	while NOT time_to_quit do
  begin
  	where     := FilePos(fp);
   	group     := read16(fp);
    element   := read16(fp);
    if group = $0002 then
    begin
   		dummy := read16(fp);
   		e_len := read16(fp);
      if element = $0001 then
      begin
   			dummy := read32(fp);
   			dummy := read16(fp);
        e_len := 0;
      end;
    end
    else e_len := read32(fp);
	  remaining := e_len;

		info := 'unknown';
    case group of
    	$0002 :
      	case element of
        	$00 :  info := 'file meta elements group len';
          $01 :  info := 'file meta info version';
          $02 :  info := 'media storage SOP class uid';
          $03 :  info := 'media storage SOP inst uid';
          $10 :  info := 'transfer syntax uid';
          $12 :  info := 'implementation class uid';
          $13 :  info := 'implementation version name';
          $16 :  info := 'source app entity title';
          $100:  info := 'private info creator uid';
          $102:  info := 'private info';
				end;
      $0008 :
        case element of
          $00 :  info := 'identifying group';
          $01 :  info := 'length to end';
          $08 :  info := 'image type';
          $10 :  info := 'recognition code';
          $16 :  info := 'SOP Class UID';
          $18 :  info := 'SOP Instance UID';
          $20 :  info := 'study date';
          $21 :  info := 'series date';
          $22 :  info := 'acquisition date';
          $23 :  info := 'image date';
          $30 :  info := 'study time';
          $31 :  info := 'series time';
          $32 :  info := 'acquisition time';
          $33 :  info := 'image time';
          $40 :  info := 'data set type';
          $41 :  info := 'data set subtype';
          $50 :  info := 'accession number';
          $60 :  begin info := 'modality';  t := _string; end;
          $70 :  info := 'manufacturer';
          $80 :  info := 'institution name';
          $90 :  info := 'referring physician''s name';
          $1010: info := 'station name';
          $103e: info := 'series description';
          $1030: info := 'study description';
          $1040: info := 'institutional dept. name';
          $1060: info := 'name phys(s) read stdy';
          $1070: begin info := 'operator''s name';  t := _string; end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级片在线观看| 日韩欧美电影一区| 激情六月婷婷综合| 最新久久zyz资源站| 欧美va天堂va视频va在线| 一本大道久久a久久综合婷婷| 久久精品国产亚洲一区二区三区| 一区二区在线观看免费 | 一区二区三区日韩在线观看| 精品国产乱码久久久久久浪潮 | 欧美午夜不卡视频| 成人av免费在线| 国产老肥熟一区二区三区| 日韩高清一级片| 亚洲一级电影视频| 一区二区三区日韩欧美| 国产欧美日韩综合精品一区二区| 日韩一区二区免费在线观看| 777色狠狠一区二区三区| 色悠悠久久综合| caoporen国产精品视频| 国产成人综合在线| 国产suv精品一区二区883| 国产一区二区视频在线| 五月婷婷激情综合网| 一区二区三区**美女毛片| 亚洲视频香蕉人妖| 玉足女爽爽91| 亚洲欧美另类小说| 一区二区在线看| 亚洲va天堂va国产va久| 樱花草国产18久久久久| 亚洲国产中文字幕在线视频综合| 亚洲国产精品久久久久秋霞影院| 亚洲一区二区视频| 中文字幕在线观看一区| 亚洲摸摸操操av| 樱花草国产18久久久久| 婷婷久久综合九色综合绿巨人 | 欧美性受xxxx| 欧美日韩成人综合在线一区二区| 欧美日本在线观看| 精品久久久久久久久久久院品网 | 国产欧美日韩在线看| 国产精品美日韩| 中文字幕五月欧美| 亚洲成人福利片| 久久99久久久欧美国产| 国产精品亚洲视频| 99久久国产免费看| 欧美日韩激情在线| 久久免费看少妇高潮| 中文字幕欧美激情一区| 亚洲国产欧美日韩另类综合| 久久国产麻豆精品| 99re在线精品| 91精品国产综合久久久久久漫画 | 亚洲色大成网站www久久九九| 亚洲国产精品视频| 精品在线观看视频| 91亚洲精品久久久蜜桃网站 | 亚洲一区二区三区在线播放| 日本特黄久久久高潮| 国产福利电影一区二区三区| 一本久久a久久免费精品不卡| 日韩欧美中文字幕制服| 亚洲三级在线观看| 日韩—二三区免费观看av| 国产 日韩 欧美大片| 91亚洲男人天堂| 26uuu国产一区二区三区| 一区二区三区不卡视频| 日韩成人免费看| 91在线视频网址| 久久久另类综合| 裸体在线国模精品偷拍| 色94色欧美sute亚洲13| 国产三级欧美三级| 天堂va蜜桃一区二区三区漫画版| 国产美女视频91| 日韩一二三四区| 一区二区三区在线观看国产| 欧美高清在线视频| 日韩不卡一二三区| 欧美一区二区三区电影| 日韩国产一区二| 制服丝袜亚洲播放| 蜜臀91精品一区二区三区| 91精品国产黑色紧身裤美女| 日韩国产欧美在线视频| 日韩一级高清毛片| 国产麻豆精品95视频| 欧美激情综合五月色丁香小说| 福利一区二区在线| 亚洲欧美日韩久久精品| 欧美在线999| 日本不卡免费在线视频| 精品99一区二区三区| 成人性生交大片免费看中文网站| 国产精品久久久久久久久久久免费看 | 日韩一区二区免费在线电影| 日本少妇一区二区| 2欧美一区二区三区在线观看视频| 美女mm1313爽爽久久久蜜臀| 精品少妇一区二区三区日产乱码 | 国产成人精品免费| 成人欧美一区二区三区视频网页 | 亚洲一区二区av在线| 7878成人国产在线观看| 国产麻豆视频精品| 亚洲日本va午夜在线影院| 欧美日韩小视频| 国产一区二区电影| 一区二区三区高清不卡| 日韩免费观看高清完整版在线观看| 精品亚洲成a人在线观看| 日本一区二区三区高清不卡| 在线亚洲高清视频| 狠狠色丁香久久婷婷综合_中| 中文字幕一区在线观看视频| 制服丝袜亚洲色图| 成人av在线网| 日韩av不卡一区二区| 国产精品另类一区| 欧美一级片免费看| 99精品国产视频| 蜜臀久久久久久久| 亚洲日本免费电影| 国产午夜久久久久| 日韩一本二本av| 色悠久久久久综合欧美99| 国内精品久久久久影院一蜜桃| 亚洲品质自拍视频| 久久久精品中文字幕麻豆发布| 欧美视频一区在线观看| 国产精品自拍三区| 午夜精品一区二区三区三上悠亚| 国产精品美女久久久久久| 欧美一级黄色片| 欧美在线不卡视频| 91啪九色porn原创视频在线观看| 国产乱对白刺激视频不卡| 免费成人性网站| 亚洲不卡av一区二区三区| 亚洲日本成人在线观看| 欧美国产禁国产网站cc| 精品国产伦一区二区三区观看方式 | 亚洲乱码精品一二三四区日韩在线| 日韩欧美国产一区二区三区| 欧美高清视频不卡网| 91一区二区三区在线观看| 成人福利在线看| 国产成人福利片| 国产精品69久久久久水密桃| 久久精品国产99国产精品| 日韩成人一级大片| 免费看黄色91| 蜜芽一区二区三区| 麻豆久久久久久| 麻豆视频一区二区| 久久97超碰国产精品超碰| 久久成人麻豆午夜电影| 秋霞av亚洲一区二区三| 日本在线不卡视频一二三区| 日精品一区二区| 奇米在线7777在线精品| 免费高清在线视频一区·| 麻豆精品久久久| 国产精品影视在线| 国产精品一区二区果冻传媒| 豆国产96在线|亚洲| 成人性生交大合| 日本伦理一区二区| 欧美日韩精品一区二区天天拍小说 | 午夜电影一区二区三区| 亚洲一区在线视频| 天天操天天色综合| 亚洲chinese男男1069| 日本不卡的三区四区五区| 久久精品久久99精品久久| 国产美女在线观看一区| 成人看片黄a免费看在线| 91免费观看视频在线| 欧美三级电影在线观看| 欧美一区二区三区啪啪| 久久精品人人做人人爽97| 国产精品久久久久久久久免费樱桃| 一区二区三区在线视频免费观看| 午夜激情久久久| 国产成人小视频| 欧美亚洲动漫另类| 精品国产精品网麻豆系列| 国产精品卡一卡二| 人人爽香蕉精品| 成人动漫一区二区在线| 91精品国产综合久久久久| 国产精品女同互慰在线看| 午夜视频在线观看一区| 国产精品白丝jk白祙喷水网站| 日本精品一区二区三区高清|