有用DELPHI处理大数据量TIFF(TIF)文件(500M以上)的吗?怎么处理,谢了!

解决方案 »

  1.   

    Imgedit ,柯达的控件,对tif文件的处理功能挺强的~!
      

  2.   

    快速显示大(几个G)BMP 的有一个//从指定的文件中读取一块图像 位置在 Px,Py(左下角坐标) 宽度 高度 由 ABMP 确定
    Procedure ReadBMPData(BMPFile:String; ABMP:TBitMap; Px,Py:LongInt);
    Var AFile:File Of Byte;
        FileHead:TBITMAPFILEHEADER;
        InfoHead:TBITMAPINFOHEADER;
        BytesPerLine:LongInt;    Bw,Bh:Integer;             //源图像大小
        W,H:Integer;               //目标图像大小
        X1,Y1,X2,Y2:Integer;       //复制区域    I:Integer;
    Begin
         If ABMP=Nil Then Exit;
         If Not FileExists(BMPFile) Then Exit;     {$I-}
         AssignFile(AFile,BMPFile);
         FileMode := 0;
         Reset(AFile);     BlockRead(AFile,FileHead,SizeOf(TBITMAPFILEHEADER));
         BlockRead(AFile,InfoHead,SizeOf(TBITMAPINFOHEADER));
         If ((InfoHead.biBitCount<>24) OR (InfoHead.biCompression<>0)) Then
         Begin
              //必须是 24 位 非压缩文件格式
              CloseFile(AFile);
              Exit;
         End;     //每条扫描线数据长度
         BytesPerLine:=(InfoHead.biWidth* InfoHead.biBitCount+31) Div 8;
         BytesPerLine:=(BytesPerLine Div 4)*4;     //目标相关信息
         Bw:=InfoHead.biWidth; Bh:=InfoHead.biHeight;
         W:=ABmp.Width; H:=ABmp.Height;     //坐标变换
         X1:=Px;   If X1<0 Then X1:=0 Else If X1>Bw-1 Then X1:=Bw-1;
         Y1:=Py;   If Y1<0 Then Y1:=0 Else If Y1>Bh-1 Then Y1:=Bh-1;
         X2:=Px+W-1; If X2<0 Then X2:=0 Else If X2>Bw-1 Then X2:=Bw-1;
         Y2:=Py+H-1; If Y2<0 Then Y2:=0 Else If Y2>Bh-1 Then Y2:=Bh-1;     //读取数据到 BMP 对象
         For I:=Y1 To Y2 Do
         Begin
              Seek(AFile,FileHead.bfOffBits+I*BytesPerLine+X1*3);
              BlockRead(AFile,ABMP.ScanLine[(H-1)-(I-Y1)]^,(X2-X1)*3);
         End;     CloseFile(AFile);
         {$I+}
    End;