Показать сообщение отдельно
  #1  
Старый 21.05.2012, 01:41
7nik 7nik вне форума
Прохожий
 
Регистрация: 28.02.2012
Сообщения: 9
Версия Delphi: 7
Репутация: 10
По умолчанию Работа с библиотекой FreeImage

Скачал библиотеку FreeImage, из приложенного ImagePreview переделал процедуру чтения картинки с поддержкой призрачности:
Код HTML:
procedure TForm1.LoadImage( Name : string); var dib:PFIBITMAP; t:FREE_IMAGE_FORMAT; Ext:string; BM:TBitmap; x,y:integer; BP:PLONGWORD; DC:HDC; BPP:longword; begin if (not OpenDialog.Execute) then abort; Image32.Bitmap.Clear; Name:=OpenDialog.FileName; t:=FreeImage_GetFileType(PAnsiChar(Name), 16); if t=FIF_UNKNOWN then begin Ext:=UpperCase(ExtractFileExt(Name)); if (Ext='.TGA')or(Ext='.TARGA') then t:=FIF_TARGA else if Ext='.MNG' then t:=FIF_MNG else if Ext='.PCD' then t:=FIF_PCD else if Ext='.WBMP' then t:=FIF_WBMP else if Ext='.CUT' then t:=FIF_CUT else raise Exception.Create('Файл "'+Name+'" имеет неподдерживаемый формат.'); end; dib:=FreeImage_Load(t,PAnsiChar(name), 0); if Dib=nil then abort; BPP:=FreeImage_GetBPP(dib); if BPP=32 then begin Image32.Bitmap.SetSize(FreeImage_GetWidth(dib), FreeImage_GetHeight(dib)); BP:=PLONGWORD(FreeImage_GetBits(dib)); for y:=Image32.Bitmap.Height-1 downto 0 do for x:=0 to Image32.Bitmap.Width-1 do begin Image32.Bitmap.Pixel[x,y]:=BP^; inc(BP); end; end else begin BM:=TBitmap.Create; DC:=GetDC(Handle); BM.handle:=CreateDIBitmap(DC, FreeImage_GetInfoHeader(dib)^, CBM_INIT, PChar(FreeImage_GetBits(dib)), FreeImage_GetInfo(dib)^, DIB_RGB_COLORS); Image32.Bitmap.Assign(BM); Alpha32.Bitmap.Assign(BM); BM.Free; ReleaseDC(Handle, DC); end; if BPP=32 then Image32.Bitmap.DrawMode:=dmBlend else Image32.Bitmap.DrawMode := dmOpaque; FreeImage_Unload(dib); end;

с помощью MultiBitmap пробывал открывать tif - показывает только 1 слой - всю картинку, хотя фотошоп показывает 4 слоя.

Вопрос: можно ли её как-то уменьшить (но чтобы прозрачность осталась) и можно ли из tif и psd извлечь только один, конкретный, слой (также с поддержкой прозрачности)?
Ответить с цитированием