作者euleramon (X'mas)
看板C_Sharp
标题Re: [心得] 用LockBits处理影像时..
时间Sat Dec 23 13:53:41 2006
※ 引述《gz ()》之铭言:
: ※ 引述《euleramon (X'mas)》之铭言:
: : 刚才de掉一个bug,发现到C#一个特别(or 奇怪o_Oa")的地方..
: : load进一张8bits的灰阶影像,如果用LockBits方法去access image,
: : coding时可能会被误认作32bits机会...。
: : // test image1
: : image1 = new Bitmap(myImageFileNameStream);
: : // test image2
: : image2 = new Bitmap((Image)image1.Clone());
: ...
: : 心得:真是不方便,不自己debug测看看真的还不知道... XD"
: 不奇怪
: 没有明确指定的话, 建立一个Bitmap物件预设都是Format32bppArgb
: 所以这也不是什麽bug, 跟LockBits也没有关系
: 真要说bug的话, 上面的程式
: image2 = (Bitmap)image1.Clone();
: 即可, PixelFormat不会变.
: 不需要又是new又是upcasting的多此二举
覆盖原档时,C#内建是需要把原始资源解lock後才行,否则会有exception出现..
当时我还需要存原始影像,後来测试发现原始影像需用像降的temp影像储存才行:
image2 = new Bitmap((Image)image1.Clone());
如果写成
image2 = (Bitmap)image1.Clone();
还是会有 exception
我不晓得确切原因为何,但就先把这方式硬记下来 @@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.246.39
1F:→ euleramon:如果降写image2 = new Bitmap((Image)image1);也不会bug 12/31 19:31