[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Karl E. Peterson

11/17/2010 10:33:00 PM

Anyone played around much with DirectX and graphics? I never have.

Not sure I've got the (mental) bandwidth to take on the entire lib for
this project. Just wanting to find a few smart routines that can do
the pan/zoom/crossfade thing (like Google's screensaver) with minimal
fuss.

My first few searches seem to turn up loads of examples out there, so
was hoping someone had a suggestion to cut the search down to some of
the better ones?

Thanks... Karl

--
..NET: It's About Trust!
http://vfre...


41 Answers

(nobody)

11/17/2010 10:48:00 PM

0

"Karl E. Peterson" <karl@exmvps.org> wrote in message
news:ic1l6q$t7i$1@news.eternal-september.org...
> Anyone played around much with DirectX and graphics? I never have.
>
> Not sure I've got the (mental) bandwidth to take on the entire lib for
> this project. Just wanting to find a few smart routines that can do the
> pan/zoom/crossfade thing (like Google's screensaver) with minimal fuss.
>
> My first few searches seem to turn up loads of examples out there, so was
> hoping someone had a suggestion to cut the search down to some of the
> better ones?

I am not sure what you need as I don't use Google's screensaver, but check
this sample which shows a globe and lets you zoom in and out. Try Page
Up/Down and arrow keys.

Earth in 3D, with basic GPS input
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=64958&am...


Karl E. Peterson

11/17/2010 11:01:00 PM

0

Nobody laid this down on his screen :
> "Karl E. Peterson" <karl@exmvps.org> wrote...
>> Anyone played around much with DirectX and graphics? I never have.
>>
>> Not sure I've got the (mental) bandwidth to take on the entire lib for this
>> project. Just wanting to find a few smart routines that can do the
>> pan/zoom/crossfade thing (like Google's screensaver) with minimal fuss.
>>
>> My first few searches seem to turn up loads of examples out there, so was
>> hoping someone had a suggestion to cut the search down to some of the
>> better ones?
>
> I am not sure what you need as I don't use Google's screensaver,

Basically, it just displays a portion of an image, full-screen, while
slowly zooming in or out with a slow pan.

> but check
> this sample which shows a globe and lets you zoom in and out. Try Page
> Up/Down and arrow keys.
>
> Earth in 3D, with basic GPS input
> http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=64958&am...

Interesting!

I'm sure it's using a far more complex set of routines than I'd be
looking for, and it might be difficult to whittle down, but who knows?

Will take a look. :-)

--
..NET: It's About Trust!
http://vfre...


Karl E. Peterson

11/17/2010 11:14:00 PM

0

Karl E. Peterson formulated on Wednesday :
> Anyone played around much with DirectX and graphics? I never have.
>
> Not sure I've got the (mental) bandwidth to take on the entire lib for this
> project. Just wanting to find a few smart routines that can do the
> pan/zoom/crossfade thing (like Google's screensaver) with minimal fuss.
>
> My first few searches seem to turn up loads of examples out there, so was
> hoping someone had a suggestion to cut the search down to some of the better
> ones?

Hmmmm, perhaps jumping at DirectX was premature? Maybe GDI+ would be a
better ticket?

To give a better illustration of what I'm after, for those unfamiliar
with the Google screensaver, I think it's also called the "Ken Burns
Effect", as illustrated here:

http://tobia.github.com/C...

Which is done with, it seems(!), javascript??? Of course, it's using
the browser for the image scaling, which will probably be the most
intensive part of the job.

So, it seems I'm in need of panning, zooming, scaling, and crossfading.
I'm starting to wonder if, maybe, I could just use FreeImage and
combine a bunch of stuff... Hmmmmmm....

--
..NET: It's About Trust!
http://vfre...


Kevin Provance

11/18/2010 3:05:00 AM

0


"Karl E. Peterson" <karl@exmvps.org> wrote in message
news:ic1njs$7r7$1@news.eternal-september.org...
:
: Hmmmm, perhaps jumping at DirectX was premature? Maybe GDI+ would be a
: better ticket?

I was going to say that too. Plus, I think Olaf has some stuff in his
dhRich thing that'll do this as well. Perhaps he'll clarify. I downloaded
one of his many amazing projects, and one of them involved doing stuff with
images.

Ulrich Korndoerfer

11/18/2010 4:02:00 AM

0

Hi Karl,

Karl E. Peterson schrieb:

>
> So, it seems I'm in need of panning, zooming, scaling, and crossfading.
> I'm starting to wonder if, maybe, I could just use FreeImage and combine
> a bunch of stuff... Hmmmmmm....
>

I use FreeImage for loading the image and then, using the FI handle, the
GDI StretchDIBits method for zooming and panning. Fast and accurate.

Crossfading is another thing. Did not do this.

Below attached is my "picture thrower" :) Dib is a FI handle.

Public Function gFI_PaintDCEx(ByVal hDestDC As Long, _
ByVal Dib As Long, _
Optional ByVal DestX As Long = 0, _
Optional ByVal DestY As Long = 0, _
Optional ByVal DestW As Long = 0, _
Optional ByVal DestH As Long = 0, _
Optional ByVal SrcX As Long = 0, _
Optional ByVal SrcY As Long = 0, _
Optional ByVal SrcW As Long = 0, _
Optional ByVal SrcH As Long = 0, _
Optional ByVal DrawMode As DRAW_MODE =
DM_DRAW_DEFAULT, _
Optional ByVal RasterOp As RASTER_OPERATOR =
ROP_SRCCOPY, _
Optional ByVal StretchMode As STRETCH_MODE =
SM_DONOTCHANGE) As Long

Dim LastStretchMode As STRETCH_MODE

gFI_PaintDCEx = -1

If hDestDC = 0 Then Exit Function
If gFI_IsDIBInvalid(Dib) Then Exit Function
If (DrawMode < DM_DRAW_DEFAULT) Or (DrawMode > DM_MIRROR_BOTH) Then Exit
Function
If (StretchMode < SM_DONOTCHANGE) Or (StretchMode > SM_HALFTONE) Then
Exit Function
Select Case RasterOp
Case ROP_SRCAND, ROP_SRCCOPY, ROP_SRCERASE, ROP_SRCINVERT, ROP_SRCPAINT
Case Else
Exit Function
End Select

If (SrcW = 0) Then SrcW = FreeImage_GetWidth(Dib)
If (SrcH = 0) Then SrcH = FreeImage_GetHeight(Dib)
If (SrcW <= 0) Or (SrcH <= 0) Then Exit Function

If (DestW = 0) Then DestW = SrcW
If (DestH = 0) Then DestH = SrcH
If (DestW <= 0) Or (DestH <= 0) Then Exit Function

If (DrawMode And DM_MIRROR_VERTICAL) <> 0 Then SrcX = SrcX + SrcW: SrcW
= -SrcW
If (DrawMode And DM_MIRROR_HORIZONTAL) <> 0 Then SrcY = SrcY + SrcH:
SrcH = -SrcH

If StretchMode <> SM_DONOTCHANGE Then
LastStretchMode = GetStretchBltMode(hDestDC)
If LastStretchMode = 0 Then Exit Function
If LastStretchMode <> StretchMode Then LastStretchMode =
SetStretchBltMode(hDestDC, StretchMode)
If LastStretchMode = 0 Then Exit Function
End If

gFI_PaintDCEx = StretchDIBits(hDestDC, _
DestX, DestY, DestW, DestH, _
SrcX, SrcY, SrcW, SrcH, _
FreeImage_GetBits(Dib), _
FreeImage_GetInfo(Dib), _
DIB_RGB_COLORS, _
RasterOp)

If (gFI_PaintDCEx = GDI_ERROR) Or (gFI_PaintDCEx = 0) Then gFI_PaintDCEx
= -1 Else gFI_PaintDCEx = Abs(gFI_PaintDCEx)

End Function

--
Ulrich Korndoerfer

VB tips, helpers, solutions -> http://www.prosource.de/...
MS Newsgruppen Alternativen -> http://www.prosource.de/ms-ng-...

Mike Williams

11/18/2010 10:33:00 AM

0

"Karl E. Peterson" <karl@exmvps.org> wrote in message
news:ic1njs$7r7$1@news.eternal-september.org...

> Hmmmm, perhaps jumping at DirectX was premature?
> Maybe GDI+ would be a better ticket? To give a better
> illustration of what I'm after, for those unfamiliar with the
> Google screensaver, I think it's also called the "Ken Burns Effect", as
> illustrated here: http://tobia.github.com/C...

The AlphaBlend function would be useful for achieving the "picture fade to
another" effect you are after, and it can also stretch either the source or
destination image or any part of it in the process if you wish (although
AlphaBlend's stretch mode is limited to COLOR_ON_COLOR so you may wish to
use StretchBlt instead for any stretching and use AlphaBlend purely for the
blending. You can of course combine AlphaBlend with various combinations of
GDI32 StretchBlt and BitBlt to achieve all of the effects you are after
(real time sliding and other effects during the fade) and for such purposes
it would probably be required to use at least three bitmaps during the
process, but here is a simple example which performs a straightforward "fade
one picture to another" using just a source and a destination PictureBox.
The Alphablend function normally uses "fade" values in the range 0 to 255
(zero to full) so you might wonder why this specific example (below)
effectively uses values in the range 0 to 50, but that's because in this
example the "next fade value" is being applied over "the result of the
previous fade value" and so the fade effect is cumulative and therefore is
complete long before we get anywhere near a fade value of 255. Anyway, here
is the test code. Paste it into a VB Form containing two PictureBoxes and
one Command Button and change the two hard coded picture paths to pictures
that exist on your own system. In this simple test I have used PaintPicture
to stretch the original pictures into the PictureBoxes, so for better
results you may wish to use StretchBlt with HALFTONE instead.

Mike

Option Explicit
Private Declare Function AlphaBlend Lib "msimg32.dll" _
(ByVal hdcDest As Long, _
ByVal xDest As Long, ByVal yDest As Long, _
ByVal WidthDest As Long, ByVal HeightDest As Long, _
ByVal hdcSrc As Long, _
ByVal xSrc As Long, ByVal ySrc As Long, _
ByVal WidthSrc As Long, ByVal HeightSrc As Long, _
ByVal BF As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" _
Alias "RtlMoveMemory" (Destination As Any, _
Source As Any, ByVal Length As Long)
Private Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Private Const AC_SRC_OVER As Long = &H0

Private Sub Form_Load()
ScaleMode = vbPixels
Picture1.AutoRedraw = True
Picture1.ScaleMode = vbPixels
Picture1.Move 5, 5, 400, 300
Picture2.AutoRedraw = True
Picture2.ScaleMode = vbPixels
Picture2.Move 415, 5, 400, 300
Command1.Move 380, 310
Picture1.PaintPicture LoadPicture("c:\temp\jessica1.jpg"), _
0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
Picture2.PaintPicture LoadPicture("c:\temp\jan1.jpg"), _
0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
End Sub

Private Sub Command1_Click()
Command1.Enabled = False
Dim BF1 As BLENDFUNCTION, lBF As Long
Dim fade As Byte, max As Byte
max = 50
For fade = 0 To max
With BF1
.BlendOp = AC_SRC_OVER
.BlendFlags = 0
If fade < max Then
.SourceConstantAlpha = fade
Else
.SourceConstantAlpha = 255
End If
.AlphaFormat = 0
End With
CopyMemory lBF, BF1, 4
AlphaBlend Picture2.hDC, 0, 0, Picture2.ScaleWidth, _
Picture2.ScaleHeight, Picture1.hDC, 0, 0, _
Picture1.ScaleWidth, Picture1.ScaleHeight, lBF
Picture2.Refresh
Sleep 25
Next fade
DoEvents ' clear any queued button clicks
Command1.Enabled = True
End Sub





>
> Which is done with, it seems(!), javascript??? Of course, it's using the
> browser for the image scaling, which will probably be the most intensive
> part of the job.
>
> So, it seems I'm in need of panning, zooming, scaling, and crossfading.
> I'm starting to wonder if, maybe, I could just use FreeImage and combine a
> bunch of stuff... Hmmmmmm....
>
> --
> .NET: It's About Trust!
> http://vfre...
>
>

Karl E. Peterson

11/19/2010 1:28:00 AM

0

Fascinating, Mike! Deceptively simple, almost. I need to play a bit,
bit I think that can be the foundation for the crossfade, to be sure.

Then I'll just need to work out the pan/zoom during it. The cumulative
part may need to be reworked for that, right? I mean, I'll essentially
(at least possibly) be generating new views into the larger picture
with each step, so I'll probably want to be explicit within the full
0-255 range, keeping each original intact, eh?

Thanks much... Karl


Mike Williams submitted this idea :
> "Karl E. Peterson" <karl@exmvps.org> wrote in message
> news:ic1njs$7r7$1@news.eternal-september.org...
>
>> Hmmmm, perhaps jumping at DirectX was premature?
>> Maybe GDI+ would be a better ticket? To give a better
>> illustration of what I'm after, for those unfamiliar with the
>> Google screensaver, I think it's also called the "Ken Burns Effect", as
>> illustrated here: http://tobia.github.com/C...
>
> The AlphaBlend function would be useful for achieving the "picture fade to
> another" effect you are after, and it can also stretch either the source or
> destination image or any part of it in the process if you wish (although
> AlphaBlend's stretch mode is limited to COLOR_ON_COLOR so you may wish to use
> StretchBlt instead for any stretching and use AlphaBlend purely for the
> blending. You can of course combine AlphaBlend with various combinations of
> GDI32 StretchBlt and BitBlt to achieve all of the effects you are after (real
> time sliding and other effects during the fade) and for such purposes it
> would probably be required to use at least three bitmaps during the process,
> but here is a simple example which performs a straightforward "fade one
> picture to another" using just a source and a destination PictureBox. The
> Alphablend function normally uses "fade" values in the range 0 to 255 (zero
> to full) so you might wonder why this specific example (below) effectively
> uses values in the range 0 to 50, but that's because in this example the
> "next fade value" is being applied over "the result of the previous fade
> value" and so the fade effect is cumulative and therefore is complete long
> before we get anywhere near a fade value of 255. Anyway, here is the test
> code. Paste it into a VB Form containing two PictureBoxes and one Command
> Button and change the two hard coded picture paths to pictures that exist on
> your own system. In this simple test I have used PaintPicture to stretch the
> original pictures into the PictureBoxes, so for better results you may wish
> to use StretchBlt with HALFTONE instead.
>
> Mike
>
> Option Explicit
> Private Declare Function AlphaBlend Lib "msimg32.dll" _
> (ByVal hdcDest As Long, _
> ByVal xDest As Long, ByVal yDest As Long, _
> ByVal WidthDest As Long, ByVal HeightDest As Long, _
> ByVal hdcSrc As Long, _
> ByVal xSrc As Long, ByVal ySrc As Long, _
> ByVal WidthSrc As Long, ByVal HeightSrc As Long, _
> ByVal BF As Long) As Long
> Private Declare Sub CopyMemory Lib "kernel32" _
> Alias "RtlMoveMemory" (Destination As Any, _
> Source As Any, ByVal Length As Long)
> Private Declare Sub Sleep Lib "kernel32" _
> (ByVal dwMilliseconds As Long)
> Private Type BLENDFUNCTION
> BlendOp As Byte
> BlendFlags As Byte
> SourceConstantAlpha As Byte
> AlphaFormat As Byte
> End Type
> Private Const AC_SRC_OVER As Long = &H0
>
> Private Sub Form_Load()
> ScaleMode = vbPixels
> Picture1.AutoRedraw = True
> Picture1.ScaleMode = vbPixels
> Picture1.Move 5, 5, 400, 300
> Picture2.AutoRedraw = True
> Picture2.ScaleMode = vbPixels
> Picture2.Move 415, 5, 400, 300
> Command1.Move 380, 310
> Picture1.PaintPicture LoadPicture("c:\temp\jessica1.jpg"), _
> 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
> Picture2.PaintPicture LoadPicture("c:\temp\jan1.jpg"), _
> 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight
> End Sub
>
> Private Sub Command1_Click()
> Command1.Enabled = False
> Dim BF1 As BLENDFUNCTION, lBF As Long
> Dim fade As Byte, max As Byte
> max = 50
> For fade = 0 To max
> With BF1
> .BlendOp = AC_SRC_OVER
> .BlendFlags = 0
> If fade < max Then
> .SourceConstantAlpha = fade
> Else
> .SourceConstantAlpha = 255
> End If
> .AlphaFormat = 0
> End With
> CopyMemory lBF, BF1, 4
> AlphaBlend Picture2.hDC, 0, 0, Picture2.ScaleWidth, _
> Picture2.ScaleHeight, Picture1.hDC, 0, 0, _
> Picture1.ScaleWidth, Picture1.ScaleHeight, lBF
> Picture2.Refresh
> Sleep 25
> Next fade
> DoEvents ' clear any queued button clicks
> Command1.Enabled = True
> End Sub
>
>
>
>
>
>>
>> Which is done with, it seems(!), javascript??? Of course, it's using the
>> browser for the image scaling, which will probably be the most intensive
>> part of the job.
>>
>> So, it seems I'm in need of panning, zooming, scaling, and crossfading. I'm
>> starting to wonder if, maybe, I could just use FreeImage and combine a
>> bunch of stuff... Hmmmmmm....
>>
>> -- .NET: It's About Trust!
>> http://vfre...
>>
>>

--
..NET: It's About Trust!
http://vfre...


Karl E. Peterson

11/19/2010 1:33:00 AM

0

Very cool, Ulrich. This one's gonna take a little setup, to fully
appreciate. But if browsing it is giving me a good indication, it's
essentially a way to slide the viewport in/out/around the image?

And, I'm thinking, most of the images will be bigger than the displayed
extent, so I'll always be shrinking them down. For some reason, I was
contemplating actually resampling, rather than just using StretchBlt.
I really don't do enough graphics, so it's always starting out all over
again for me, it seems.

Thanks much... Karl



Ulrich Korndoerfer explained :
> Hi Karl,
>
> Karl E. Peterson schrieb:
>
>>
>> So, it seems I'm in need of panning, zooming, scaling, and crossfading. I'm
>> starting to wonder if, maybe, I could just use FreeImage and combine a
>> bunch of stuff... Hmmmmmm....
>>
>
> I use FreeImage for loading the image and then, using the FI handle, the GDI
> StretchDIBits method for zooming and panning. Fast and accurate.
>
> Crossfading is another thing. Did not do this.
>
> Below attached is my "picture thrower" :) Dib is a FI handle.
>
> Public Function gFI_PaintDCEx(ByVal hDestDC As Long, _
> ByVal Dib As Long, _
> Optional ByVal DestX As Long = 0, _
> Optional ByVal DestY As Long = 0, _
> Optional ByVal DestW As Long = 0, _
> Optional ByVal DestH As Long = 0, _
> Optional ByVal SrcX As Long = 0, _
> Optional ByVal SrcY As Long = 0, _
> Optional ByVal SrcW As Long = 0, _
> Optional ByVal SrcH As Long = 0, _
> Optional ByVal DrawMode As DRAW_MODE = DM_DRAW_DEFAULT,
> _
> Optional ByVal RasterOp As RASTER_OPERATOR =
> ROP_SRCCOPY, _
> Optional ByVal StretchMode As STRETCH_MODE =
> SM_DONOTCHANGE) As Long
>
> Dim LastStretchMode As STRETCH_MODE
>
> gFI_PaintDCEx = -1
>
> If hDestDC = 0 Then Exit Function
> If gFI_IsDIBInvalid(Dib) Then Exit Function
> If (DrawMode < DM_DRAW_DEFAULT) Or (DrawMode > DM_MIRROR_BOTH) Then Exit
> Function
> If (StretchMode < SM_DONOTCHANGE) Or (StretchMode > SM_HALFTONE) Then Exit
> Function
> Select Case RasterOp
> Case ROP_SRCAND, ROP_SRCCOPY, ROP_SRCERASE, ROP_SRCINVERT, ROP_SRCPAINT
> Case Else
> Exit Function
> End Select
>
> If (SrcW = 0) Then SrcW = FreeImage_GetWidth(Dib)
> If (SrcH = 0) Then SrcH = FreeImage_GetHeight(Dib)
> If (SrcW <= 0) Or (SrcH <= 0) Then Exit Function
>
> If (DestW = 0) Then DestW = SrcW
> If (DestH = 0) Then DestH = SrcH
> If (DestW <= 0) Or (DestH <= 0) Then Exit Function
>
> If (DrawMode And DM_MIRROR_VERTICAL) <> 0 Then SrcX = SrcX + SrcW: SrcW =
> -SrcW
> If (DrawMode And DM_MIRROR_HORIZONTAL) <> 0 Then SrcY = SrcY + SrcH: SrcH =
> -SrcH
>
> If StretchMode <> SM_DONOTCHANGE Then
> LastStretchMode = GetStretchBltMode(hDestDC)
> If LastStretchMode = 0 Then Exit Function
> If LastStretchMode <> StretchMode Then LastStretchMode =
> SetStretchBltMode(hDestDC, StretchMode)
> If LastStretchMode = 0 Then Exit Function
> End If
>
> gFI_PaintDCEx = StretchDIBits(hDestDC, _
> DestX, DestY, DestW, DestH, _
> SrcX, SrcY, SrcW, SrcH, _
> FreeImage_GetBits(Dib), _
> FreeImage_GetInfo(Dib), _
> DIB_RGB_COLORS, _
> RasterOp)
>
> If (gFI_PaintDCEx = GDI_ERROR) Or (gFI_PaintDCEx = 0) Then gFI_PaintDCEx = -1
> Else gFI_PaintDCEx = Abs(gFI_PaintDCEx)
>
> End Function

--
..NET: It's About Trust!
http://vfre...


Karl E. Peterson

11/19/2010 1:34:00 AM

0

Kevin Provance formulated on Wednesday :
> "Karl E. Peterson" <karl@exmvps.org> wrote...
>>
>> Hmmmm, perhaps jumping at DirectX was premature? Maybe GDI+ would be a
>> better ticket?
>
> I was going to say that too. Plus, I think Olaf has some stuff in his
> dhRich thing that'll do this as well. Perhaps he'll clarify. I downloaded
> one of his many amazing projects, and one of them involved doing stuff with
> images.

I was sure there was some very good, and very straight-forward stuff
out there. I'd love to have the time, myself, to *really* get fully up
to speed with graphics stuff like this, but it's just one of those
"once in a while" needs it seems so it's hard to invest what I'd like
to. <sigh> Got a couple of very promising leads below, from Ulrich and
Mike.

--
..NET: It's About Trust!
http://vfre...


Mike Williams

11/19/2010 6:13:00 AM

0

"Karl E. Peterson" <karl@exmvps.org> wrote in message
news:ic4jra$3re$1@news.eternal-september.org...

> . . . Then I'll just need to work out the pan/zoom during it.
> The cumulative part may need to be reworked for that, right?

Yep. For example in one of the zoom / pan / fades using the Ken Burns effect
at the link you posted the final image after the zoom /pan / fade has
finished is the zoomed image of the top portion of the sandcastle tower. The
next image (the sunflower) is then zoomed / panned / faded over it, and
during the process the zoomed top part of the tower remains static within
the destination whilst the sunflower is gradually zoomed / panned / faded
into it.

In order to achieve that effect it would probably be best to store the final
"zoomed image of the top portion of the sandcastle tower" in a third
PictureBox (or DIB or whatever). Then immediately before each individual
step of the next zoom / pan / fade you would perform a standard blit of the
third PictureBox directly into the destination PictureBox and then you would
use AlphaBlend to blend the desired portion of the source (the sunflower)
into the same destination.

The single call to AlphaBlend is capable of stretching any desired portion
of the source and blending it into the destination, so you could perform the
pan and the zoom and the fade at the same time and would not need any
additional StretchBlt steps (unless you were unhappy with the COLOR_ON_COLOR
stretch mode of AlphaBlend). Using such a method each "frame" of the zoom /
pan / blend would require one standard blit followed by a single call to
AlphaBlend using a straightforward SourceConstantAlpha in the range zero to
255.

One other point to note is that in order for the zoom to be properly
effective and for it to maintain full quality at all desired "zoom" levels
you would need to use original images which have a much greater pixel size
than the pixel size of the destination (as the Ken Burns pan / zoom / fades
at the link you posted are clearly doing). This would not add any real
complication though and it is just a question of "getting the numbers
right".

To be perfectly honest I have only ever used AlphaBlend for straightforward
blending of images (as in the "fade one image to another" example I posted
yesterday) and I have not written any code which uses it for the combined
panning / zooming / fading which you require, and so I do not have any
suitable code to hand. It is all very definitely "doable" though. I'd
actually have a go myself at this point but we have recently moved house
(hence my absence from this group for some time) and I am totally snowed
under with jobs around the house that need doing! [Phew, that gets me out of
that one ;-)].

Mike