- 題名: image.cloneとrotateflip
- 日時: 2008/08/16 15:12:39
- ID: 22720
- この記事の返信元:
- (なし)
- この記事への返信:
- [22722] Re[1]: image.cloneとrotateflip2008/08/17 0:42:48
- ツリーを表示
■No22722に返信(管理人さんの記事)
> 具体的にはどのようなコードでしょうか?
If 最初 Then
Img = Image.FromFile(File)
If FileNo = 1 Then
Img1 = Img.Clone
If Rot1 Then Img.RotateFlip(RotateFlipType.Rotate90FlipNone)
EndIf
If FileNo = 2 Then
Img2 = Img.Clone
:
Call XXX(Img)
Else
If FileNo = 1 Then
ImgX = Img1.Clone
If Rot1 Then ImgX.RotateFlip(RotateFlipType.Rotate90FlipNone) ←ここでエラー
EndIf
If FileNo = 2 Then
ImgX = Img2.Clone
:
Call XXX(ImgX)
Endif
System.Runtime.InteropServices.ExternalException: GDI+ で一般的なエラーが発生しました。
at System.Drawing.Image.RotateFlip(RotateFlipType rotateFlipType)
at xxx.Module1.xxx() in xxx\Module1.vb:line 2277
複数の画像をまとめて1つのPictureBoxに表示してるのですが、その都度
ファイルを読み込みたくないのと、リセット時に簡単に元に戻せるように
元のイメージを直接いじるのは避けたいので、イメージを保管して以降の
処理(回転とかズームとか)はクローンで処理しようとしたのです
…と思ったのですが、念のためにそこだけのテスト版作って試したら
動きますねえ…
それとImg1をRotateFlipしてからCloneすると動きます
ただ、オリジナルを回転すると戻すのが大変だし…
まあ読み直せばいいんだけど
■No22724に返信(管理人さんの記事)
> 過去ログに似たような投稿がありましたので、とりあえずご覧になってみてください。
>
> http://dobon.net/vb/bbs/log3-24/15246.html
どうやってビットマップをイメージにしようか悩みましたが結局以下のような
コードで何とかなりました
ありがとうございました
Select Case _Rot1
Case "R"
_Img1.RotateFlip(RotateFlipType.Rotate90FlipNone)
Case "L"
_Img1.RotateFlip(RotateFlipType.Rotate270FlipNone)
Case "H"
_Img1.RotateFlip(RotateFlipType.RotateNoneFlipX)
Case "V"
_Img1.RotateFlip(RotateFlipType.RotateNoneFlipY)
End Select
_TmpBMP = New Bitmap(_Img1.Width, _Img1.Height)
_TmpG = Graphics.FromImage(_TmpBMP)
_TmpG.DrawImage(_Img1, 0, 0, _Img1.Width, _Img1.Height)
_hBMP = _TmpBMP.GetHbitmap
_ImgX = Image.FromHbitmap(_hBMP)
分類:[.NET]
rotateflipしたイメージのcloneを作ろうとしたり、イメージのcloneを
rotateflipしようとすると「GDI+での一般的なエラーです」と出るのですが
回避方法はありますでしょうか