2010-04-02 16 views
26

Tüm desteklenen grafik dosya biçimlerini görüntülemek için güzel bir şekilde çalışan bir TWicImage, IWicBitmap ve IWicBitmapSource'ım var, Rotasyon, Yatay Çevir, Dikey Çevir, Ölçeklendir ve Kırpma. Bunların hepsi iyi çalışıyor gibi görünüyor ve WicImages pixelformat'ını alabilirim, ancak bir TWicImage'ın piksel biçimini nasıl değiştireceğimi veya ayarlayacağımı anlayamıyorum.Delphi 2010'da bir TWICImage'ın pixelformat'ı nasıl değiştirilir

WICPixelFormatGUID'in dönüşüme yönelik olarak pixelformat olarak kullanılması için bir iletişim kutusu oluşturdum.

WicImage'ın IWICColorTransform veya başka bir Wincodec yöntemiyle piksel biçimini değiştirmeyi gösteren bazı kodları paylaşan var mı?

Bill

şimdi 2011 boyunca Onun yarıda ... Bu denedim ve işe görünüyor bilmek isteyebilirsiniz olanlar için çok (Geliştirici Express tarafından TcxImage kullanır, ancak ben TImage de çalışacak şüpheli) :

procedure TForm1.N16bitBGR1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat16bppBGR555, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N16bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat16bppGray, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeFixedGray16); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N24bitGBB1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat24bppBGR, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N2bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat2bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N32bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat32bppGrayFloat, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeFixedGray256); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N32bitGRBA1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N4bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat4bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N8bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat8bppGray, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N8bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeFixedGray256); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 
+1

+1 her neyse, basitçe ['WICConvertBitmapSource'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ee719819 (v = vs.85) .aspx) işlevini formata ihtiyaç duymadan kullanabilirsiniz. Bunun için dönüştürücü. – TLama

+1

Merhaba Bill, cevabınız cevaplanmamış Delphi sorularının başında. Doğru okuduysam çözdün ve cevabını soruna koy. Cevabı cevap bölümüne koyabilir ve kabul edebilir misiniz? – bummi

+0

Onun şimdi kasım ve bu yapılmadı, birisinin atıfta bulunmasını onun için yapmasını öneririm. –

cevap

2

Bummi ve Warren P, bir süre önce eklediğim cevabı yayınlamamı istedi. İşte cevabı: Bunu denedim ve işe görünüyor bilmek isteyebilirsiniz olanlar için

(Geliştirici Express tarafından TcxImage kullanır, ancak ben TImage de çalışacak şüpheli):

procedure TForm1.N16bitBGR1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat16bppBGR555, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N16bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat16bppGray, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeFixedGray16); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N24bitGBB1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat24bppBGR, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N2bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat2bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N32bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat32bppGrayFloat, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeFixedGray256); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N32bitGRBA1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N4bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat4bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N8bitGray1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat8bppGray, WICBitmapDitherTypeSolid, nil, 0, 
     WICBitmapPaletteTypeMedianCut); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end; 

procedure TForm1.N8bitIndexed1Click(Sender: TObject); 
var 
    wicImg: TWICImage; 
    wicBitmap: IWICBitmap; 
    iBmpSource: IWICBitmapSource; 
    puiWidth, puiHeight: UINT; 
    iConverter: IWICFormatConverter; 
begin 
    if cxImage1.Picture.Graphic is TWICImage then 
    begin 
    Screen.Cursor := crHourGlass; 
    try 
     wicImg := TWICImage(cxImage1.Picture.Graphic); 
     wicImg.ImagingFactory.CreateFormatConverter(iConverter); 
     iBmpSource := wicImg.Handle as IWICBitmapSource; 
     iBmpSource.GetSize(puiWidth, puiHeight); 
     iConverter.Initialize(iBmpSource, GUID_WICPixelFormat8bppIndexed, WICBitmapDitherTypeNone, nil, 0, 
     WICBitmapPaletteTypeFixedGray256); 
     wicImg.ImagingFactory.CreateBitmapFromSourceRect(iConverter, 0, 0, puiWidth, puiHeight, wicBitmap); 
     if Assigned(wicBitmap) then 
     wicImg.Handle := wicBitmap; 
     cxImage1.Repaint; 
     cxImage1.Update; 
     cxImage1.Invalidate; 
     dxStatusBar1.Panels[ 0 ].Text := ExtractFileDir(AFilename); 
     dxStatusBar1.Panels[ 1 ].Text := ExtractFileName(AFilename); 
     dxStatusBar1.Panels[ 2 ].Text := 'Width: ' + IntToStr(WICImageWidth(cxImage1)); 
     dxStatusBar1.Panels[ 3 ].Text := 'Height: ' + IntToStr(WICImageHeight(cxImage1)); 
     dxStatusBar1.Panels[ 4 ].Text := 'Pixel Format: ' + WICGetPixelFormat(cxImage1); 
    finally 
     Screen.Cursor := crDefault; 
    end; 
    end; 
end;