C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

pictureBox save方法 [1]

[トピック内 28 記事 (21 - 28 表示)]  << 0 | 1 >>

■100228 / inTopicNo.21)  Re[13]: pictureBox save方法
  
□投稿者/ banana (5回)-(2022/07/12(Tue) 09:26:14)
No100218 (初心者K さん) に返信

>>その場合、furu さんの No100207 の投稿のように、pictureboxの表示部分を切り取ったbitmapを
>>取得する必要がありますが、そのようにされているでしょうか?
>>
> 最初にKOZさんが教えてくれました。実施しています。

多分、この行のことだと思います。
> pictureBox1.DrawToBitmap(bmp, new Rectangle(Point.Empty, pictureBox1.Size));

これは、確かにpictureBox1の領域で画像を切り取っているのですが、
気になる点は、実際のpictureBox1の領域は親フォームの外側にはみ出ているのではないかということです。
親フォームからはみ出た部分は見えないので、見た目のpictureBox1の領域は親フォームの範囲内だけど、
実際のpictureBox1.Sizeは親フォームの外側にはみ出て見えない部分も含みます。
もし、フォーム上のpictureBox1の見た目とSAVEした画像と異なる場合は、親フォームのサイズと
pictureBox1のサイズを確認すると良いと思います。
(ついでにpictureBox1.Locationで表示開始位置も確認するとよいでしょう。)
引用返信 編集キー/
■100229 / inTopicNo.22)  Re[14]: pictureBox save方法
□投稿者/ furu (167回)-(2022/07/12(Tue) 09:43:05)
No100228 (banana さん) に返信
> 多分、この行のことだと思います。
>>pictureBox1.DrawToBitmap(bmp, new Rectangle(Point.Empty, pictureBox1.Size));
>
> これは、確かにpictureBox1の領域で画像を切り取っているのですが、
> 気になる点は、実際のpictureBox1の領域は親フォームの外側にはみ出ているのではないかということです。
親フォームの外側にはみ出てはいますが
「表示されている画像をSAVE」と言っているので
親フォームをSAVEすれば表示されているをSAVEできると思います。

this.DrawToBitmapか
picturebox.Parent.DrawToBitmap

pictureBox1.DrawToBitmapをどんなに頑張っても
元の画像しかSAVEできないです。
引用返信 編集キー/
■100230 / inTopicNo.23)  Re[14]: pictureBox save方法
□投稿者/ kiku (279回)-(2022/07/12(Tue) 09:44:02)
No100228 (banana さん) に返信
> ■No100218 (初心者K さん) に返信

bananaさんのご指摘事項はすでに指摘されていることが多いので、
長くて大変ですが、最初から最後まで目を通した方が良いと思います。

解決済み
引用返信 編集キー/
■100231 / inTopicNo.24)  Re[15]: pictureBox save方法
□投稿者/ banana (6回)-(2022/07/12(Tue) 09:50:53)
No100230 (kiku さん) に返信

> bananaさんのご指摘事項はすでに指摘されていることが多いので、
> 長くて大変ですが、最初から最後まで目を通した方が良いと思います。
>

いやぁ。ゴメンナサイ。
質問者さんがうまく理解できていないと思って、補足したつもりでした。
引用返信 編集キー/
■100237 / inTopicNo.25)  Re[15]: pictureBox save方法
□投稿者/ KOZ (284回)-(2022/07/12(Tue) 18:09:20)
No100229 (furu さん) に返信
> pictureBox1.DrawToBitmapをどんなに頑張っても
> 元の画像しかSAVEできないです。

たぶん、初心者K さんと同じ現象ですね。どのようなコードを書いてますか?
たとえば、1024x768 くらいの大きな画像を用意して

private void button1_Click(object sender, EventArgs e) {
    pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
    pictureBox1.Image = Image.FromFile(@"Z:\test.bmp");
    pictureBox1.Width = 64;
    pictureBox1.Height = 64;
    using (var bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height)) {
        pictureBox1.DrawToBitmap(bmp, new Rectangle(Point.Empty, pictureBox1.Size));
        bmp.Save(@"Z:\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
    }
}

とすると、64x64 の範囲に収まるように縮小された画像が保存されるはずです。
.NET6 と .NET Framework で動きが違うのかと思って両方試しましたが同じ結果になりました。
私の環境は Windows 10 LTSC(64bit) ですが、Windows 11 だったりします?

引用返信 編集キー/
■100240 / inTopicNo.26)  Re[16]: pictureBox save方法
□投稿者/ furu (168回)-(2022/07/12(Tue) 19:27:33)
No100237 (KOZ さん) に返信
> ■No100229 (furu さん) に返信
> たぶん、初心者K さんと同じ現象ですね。どのようなコードを書いてますか?
> 私の環境は Windows 10 LTSC(64bit) ですが、Windows 11 だったりします?
同じ環境です。

ただ、SizeModeは設定していませんでした。
SizeModeを設定すると拡大縮小した画像が保存されました。
引用返信 編集キー/
■100242 / inTopicNo.27)  Re[17]: pictureBox save方法
□投稿者/ KOZ (285回)-(2022/07/12(Tue) 19:47:57)
2022/07/13(Wed) 04:14:38 編集(投稿者)

No100240 (furu さん) に返信
> ただ、SizeModeは設定していませんでした。
> SizeModeを設定すると拡大縮小した画像が保存されました。

ですよね?
表示された内容がそのまま保存されています。
SizeMode を設定せず Normal のままなら、元画像の左上 24x24 の画像が保存されますね。

「元の画像しかSAVEできないです。」っていうのはどう解釈したら良いですか?



引用返信 編集キー/
■100268 / inTopicNo.28)  Re[14]: pictureBox save方法
□投稿者/ 初心者K (11回)-(2022/07/13(Wed) 18:34:08)
No100220 (furu さん) に返信
> ■No100218 (初心者K さん) に返信
>>>>formのmenu画面から押してSAVEするようにしています。
>>>>pictureboxに表示された後に押しているので、そこは問題ないと思われます。
> pictureboxに表示されているものでなく
> 表示されているものをSAVEしたいのですよね。
> pictureboxだと思っているけど違うとこだったりします。
>
> >>その場合、furu さんの No100207 の投稿のように、pictureboxの表示部分を切り取ったbitmapを
> >>取得する必要がありますが、そのようにされているでしょうか?
>>最初にKOZさんが教えてくれました。実施しています。
> picturebox.ParentでSAVEしてみて元と同じでしたか?

pictureboxと書いている所をpicturebox.Parentで書いたらうまくいきました!!
内容は理解できていませんが、ありがとうございます。
助かりました。



解決済み
引用返信 編集キー/

このトピックをツリーで一括表示

<前の20件
トピック内ページ移動 / << 0 | 1 >>

このトピックに書きこむ