高分求助图象的选择、缩放及旋转(500)(100分)

  • 主题发起人 主题发起人 liwenbin
  • 开始时间 开始时间
L

liwenbin

Unregistered / Unconfirmed
GUEST, unregistred user!
我相实现photoshop的部分功能:
在一块画布上粘贴剪贴板里的图形(位图),然后可以对剪贴过来的图形在画布上进行
缩放、选择旋转等操作。
可以是多层的。
谢谢!!!可以意见!!!!!!
 
这种东西已经很多了,留下mail,给你一个例子.
 
我也想要!!!!!
xxhsh@263.net !! 多谢!!!!!!!
 
谢谢!!!!!!!
li0713@hotmail.com
li0713@sohu.com
 
去接收,也许不是太符合你的要求,不过你可以参考一下;
有问题再联系。
 
俺也想要:taishan_wen@163.com
 
to 卷起千堆雪tyn ,
贴上网站好不好
 
关于图象处理的网站,我比较欣赏的是 : www.efg2.com
 
俺也想要:joe-lu@163.com

谢谢!!!!!!!
 
关于“图像旋转”,有专家如下说法:
*************************************
如果有人试着通先选择新的中心点再旋转图片这个方法来得到新的图片的话,会发觉图片
上有许多“洞”,这是因为不连续的空间和整数的数学运算造成的。为了解决这个问题,
我们可以使用一个“相反”的方法。仔细考虑新图像中的每个像素,查找它在原图像中的
位置。这样的技术就会解决任何在图像中的“洞”。
*************************************
我个人观点:
通用的算法原理都一样,及选择旋转后的图像的点,通过算法查找气再原图中对应的香素点!
我觉得旋转后的图像有效区域的象素点数和原图片的象素点数一样多,怎么会出现“洞”呢?
我不理解上面这段话的含义,哪位仁兄理解了帮忙解释一下
 
小雪推荐的网站的上的:
CONST
MaxPixelCount = 32768;

TYPE
TRGBTripleArray = ARRAY[0..MaxPixelCount-1] OF TRGBTriple;
pRGBTripleArray = ^TRGBTripleArray;
...

// "Simple" approach. For pixel (i,j), use "reverse" rotation to find
// where the rotated pixel must have been before the rotation.
// Don't bother with center of pixel adjustment.
// Assumes input BitmapOriginal has PixelFormat = pf24bit.
FUNCTION RotateBitmapMethod1 (CONST BitmapOriginal: TBitmap;
CONST iRotationAxis, jRotationAxis: INTEGER;
CONST AngleOfRotation: DOUBLE {radians} ): TBitmap;

VAR
cosTheta : EXTENDED;
i : INTEGER;
iOriginal : INTEGER;
iPrime : INTEGER;
j : INTEGER;
jOriginal : INTEGER;
jPrime : INTEGER;
RowOriginal: pRGBTripleArray;
RowRotated : pRGBTRipleArray;
sinTheta : EXTENDED;
BEGIN
// The size of BitmapRotated is the same as BitmapOriginal. PixelFormat
// must also match since 24-bit GBR triplets are assumed in ScanLine.
RESULT := TBitmap.Create;
RESULT.Width := BitmapOriginal.Width;
RESULT.Height := BitmapOriginal.Height;
RESULT.PixelFormat := pf24bit; // Force this

// Get SIN and COS in single call from math library
sincos(AngleOfRotation, sinTheta, cosTheta);

// If no math library, then use this:
// sinTheta := SIN(AngleOfRotation);
// cosTheta := COS(AngleOfRotation);

// Step through each row of rotated image.
FOR j := RESULT.Height-1 DOWNTO 0 DO
BEGIN
RowRotated := RESULT.Scanline[j];
jPrime := j - jRotationAxis;

FOR i := RESULT.Width-1 DOWNTO 0 DO
BEGIN
iPrime := i - iRotationAxis;
iOriginal := iRotationAxis + ROUND(iPrime * CosTheta - jPrime * sinTheta);
jOriginal := jRotationAxis + ROUND(iPrime * sinTheta + jPrime * cosTheta);

// Make sure (iOriginal, jOriginal) is in BitmapOriginal. If not,
// assign blue color to corner points.
IF (iOriginal >= 0) AND (iOriginal <= BitmapOriginal.Width-1) AND
(jOriginal >= 0) AND (jOriginal <= BitmapOriginal.Height-1)
THEN BEGIN
// Assign pixel from rotated space to current pixel in BitmapRotated
RowOriginal := BitmapOriginal.Scanline[jOriginal];
RowRotated := RowOriginal[iOriginal]
END
ELSE BEGIN
RowRotated.rgbtBlue := 255; // assign "corner" color
RowRotated.rgbtGreen := 0;
RowRotated.rgbtRed := 0
END

END
END
END {RotateBitmapMethod1};
 
to 卷起千堆雪tyn:
我也要在一块画布上粘贴剪贴板里的图形(位图),然后可以对剪贴过来的图形在画布上进行
缩放、选择旋转等操作的实例。
pengyi007@tellyes.com
谢谢!
 
卷起千堆雪tyn近来可好,师弟们想念的紧阿,^_^!
 
我也要
common1@netease.com
 
后退
顶部